۰
subtitle
ارسال: #۱
  
مشکل در مفهوم LR
سلام دوستای خوبم
من دارم کامپایلر میخونم، واقعا گیج شدم، خیلی دوس دارم مفهومشو بفهمم ولی هر چی زور میزنم یه چیزایی میفهمم ولی کافی نیست.
مثلا در پارسینگ های LR من خیلی سعی کردم مفهومشو بفهمم، ببینم واقعاچه اتفاقی میفته ولی فایده ای نداشت.یا مثلا first وfollow، مفهومشون چیه؟چه اتفاقی میفته؟
توی این جدول تجزیه هم مفهومو نمیفهمم، الان این عبارتی که توی پشته ریخته میشه،در واقعیت یعنی چی؟اصلا گیج شدم، بلدم مسئله حل کنما ولی مفهومش خیلی برام نامفهومه.
امیدوارم منظورمو درست رسونده باشم.
تشکر میکنم.
من دارم کامپایلر میخونم، واقعا گیج شدم، خیلی دوس دارم مفهومشو بفهمم ولی هر چی زور میزنم یه چیزایی میفهمم ولی کافی نیست.
مثلا در پارسینگ های LR من خیلی سعی کردم مفهومشو بفهمم، ببینم واقعاچه اتفاقی میفته ولی فایده ای نداشت.یا مثلا first وfollow، مفهومشون چیه؟چه اتفاقی میفته؟
توی این جدول تجزیه هم مفهومو نمیفهمم، الان این عبارتی که توی پشته ریخته میشه،در واقعیت یعنی چی؟اصلا گیج شدم، بلدم مسئله حل کنما ولی مفهومش خیلی برام نامفهومه.
امیدوارم منظورمو درست رسونده باشم.
تشکر میکنم.
۲
ارسال: #۲
  
مشکل در مفهوم LR
سلام.
ببینید اساسا کامپایلر از یک سری فازها تشکیل شده. تحلیل گر لغوی. تحلیل گر نحوی، تحلیل گر معنایی ...
هرکدوم از این قسمتها به قسمت های بعدی و قبلی خود در ارتباط هستند. مثلا تحلیلگر لغوی یک سری توکن رو مو به مو به تحلیلگر نحوی میده. تحلیگر نحوی بررسی می کنه که این ساختاری که از قبلی گرفته دارای نظم و ترتیب خاصی هست یا نه.
تحلیلگر نحوی یا همون پارسر کارش پذیرش نحو یک زبان هست. مثلا بررسی می کنه که if قبل از statment بیاد. و به این صورت.
خب حالا پارسرها خودشون به انواعی (دونوع) دسته بندی میشوند. پایین به بالا و بالا به پایین.
من دقیقا نمی خوام زیاد وارد جزئیات بشم. اما تمام این نکات رو باید بلد باشید.
در یکسری پارسر ها برای اینکه نحو یک زبان تشخیص داده بشه، باید مجموعه های first و fallow هر وضعیت بررسی بشه.
در مجموعه first هدف این هست که عبارت به چه چیزی شروع میشه، مثلا A--> aS|bB وضعیت A میتونه یا با a و یا با b شروع بشه.
در مجموعه fallow هدف این هست که بدونیم بعد از یک غیر ترمینال چه عبارات ممکنی ممکن هست بیایند. مثلا A-->Dc رو دقت کنید، fallowی D برابر هست با c چرا که بعد از غیر پایانه D تنها پایانه ای که قراره بیاد c خواهد بود.
پس برای مشخص کردن اینکه از یک وضعیت به کدوم یک از وضایع ممکن میشه رفت از مجموعه first و برای اطلاع از وضعیت آتی از مجموعه fallow بهره می بریم.
بهترین مثالهایی که میشه در این زمینه حل کرد، همون سوالای if و if else هستن که بیشتر مفهوم کامپایلر رو تداعی میکنند تا این مثال های A B و ...
ببینید اساسا کامپایلر از یک سری فازها تشکیل شده. تحلیل گر لغوی. تحلیل گر نحوی، تحلیل گر معنایی ...
هرکدوم از این قسمتها به قسمت های بعدی و قبلی خود در ارتباط هستند. مثلا تحلیلگر لغوی یک سری توکن رو مو به مو به تحلیلگر نحوی میده. تحلیگر نحوی بررسی می کنه که این ساختاری که از قبلی گرفته دارای نظم و ترتیب خاصی هست یا نه.
تحلیلگر نحوی یا همون پارسر کارش پذیرش نحو یک زبان هست. مثلا بررسی می کنه که if قبل از statment بیاد. و به این صورت.
خب حالا پارسرها خودشون به انواعی (دونوع) دسته بندی میشوند. پایین به بالا و بالا به پایین.
من دقیقا نمی خوام زیاد وارد جزئیات بشم. اما تمام این نکات رو باید بلد باشید.
در یکسری پارسر ها برای اینکه نحو یک زبان تشخیص داده بشه، باید مجموعه های first و fallow هر وضعیت بررسی بشه.
در مجموعه first هدف این هست که عبارت به چه چیزی شروع میشه، مثلا A--> aS|bB وضعیت A میتونه یا با a و یا با b شروع بشه.
در مجموعه fallow هدف این هست که بدونیم بعد از یک غیر ترمینال چه عبارات ممکنی ممکن هست بیایند. مثلا A-->Dc رو دقت کنید، fallowی D برابر هست با c چرا که بعد از غیر پایانه D تنها پایانه ای که قراره بیاد c خواهد بود.
پس برای مشخص کردن اینکه از یک وضعیت به کدوم یک از وضایع ممکن میشه رفت از مجموعه first و برای اطلاع از وضعیت آتی از مجموعه fallow بهره می بریم.
بهترین مثالهایی که میشه در این زمینه حل کرد، همون سوالای if و if else هستن که بیشتر مفهوم کامپایلر رو تداعی میکنند تا این مثال های A B و ...
۰
ارسال: #۳
  
مشکل در مفهوم LR
به طور خلاصه برداشت خودم رو می گم در تکامل حرفای دیگر دوستان :
تو روش پارسینگ LR ما قصد داریم تا درخت پارس رو از پایین به بالا بسازیم. R به خاطر تشکیل درخت به صورت مشتق راست right derivation است و L هم برای خواندن ورودی از چپ به راست هستش.
وقتی مخواییم رشته ای رو پیدا کنیم اولین سوال این هست که به محض دیدن یک رشته باید تشخیص بدیم این رشته توسط کدوم غیر پایانی ها قابل تولید هستش و به همین خاطر مجموعه first رو تولید می کنیم، تو این مجموعه می گیم اگه یک ورودی مثل a رو دیدم، کدوم غیر پایانی ها می تونند با این پایانی شروع شده و ادامه رشته رو تولید کنن.
در ادامه پارسینگ به جایی می خوریم که ما نیاز تا بدونیم با دیدن یک ورودی مثل a آیا باز غیر پایانی جدیدی رو شروع کنیم یا نه، یعنی آیا بادیدن رشته ورودی ممکنه که غیرپایانی در حال رشد رو متوقف کنیم و ادامه پارسینگ رو به یه غیر پایانی دیگه شروع کنیم. وقتی یه ورودی مثل b رو دیدیم، آیا می تونیم قسمتی از رشته های ورودی رو که خوندیم به یه غیر پایانی کاهشش بدیم و ادامه کار رو بریم یا نه ؟ برای اینکار از مجموعه follow استفاده میشه تا ببینیم کی رشته مربوط به یک غیر پایانی شروع میشه و بعد از اون پایانی که کاهشش دایدم چه نماد هایی می تونه بیاد.
از اسم هر دو مجموعه تقریبا معاومه به چه دردی میخوره. First یعنی غیرپایانی ها با چه پایانی هایی می تونن شروع بشن و ابتدای گرامر اون غیر پایانی هستن.
پیرو یا تعقیب یعنی چه رشته هایی بلافاصله بعد از غیر پایانی می تونه بیاد و اون غیر پایانی رو تعقیب می کنه .
تو روش پارسینگ LR ما قصد داریم تا درخت پارس رو از پایین به بالا بسازیم. R به خاطر تشکیل درخت به صورت مشتق راست right derivation است و L هم برای خواندن ورودی از چپ به راست هستش.
وقتی مخواییم رشته ای رو پیدا کنیم اولین سوال این هست که به محض دیدن یک رشته باید تشخیص بدیم این رشته توسط کدوم غیر پایانی ها قابل تولید هستش و به همین خاطر مجموعه first رو تولید می کنیم، تو این مجموعه می گیم اگه یک ورودی مثل a رو دیدم، کدوم غیر پایانی ها می تونند با این پایانی شروع شده و ادامه رشته رو تولید کنن.
در ادامه پارسینگ به جایی می خوریم که ما نیاز تا بدونیم با دیدن یک ورودی مثل a آیا باز غیر پایانی جدیدی رو شروع کنیم یا نه، یعنی آیا بادیدن رشته ورودی ممکنه که غیرپایانی در حال رشد رو متوقف کنیم و ادامه پارسینگ رو به یه غیر پایانی دیگه شروع کنیم. وقتی یه ورودی مثل b رو دیدیم، آیا می تونیم قسمتی از رشته های ورودی رو که خوندیم به یه غیر پایانی کاهشش بدیم و ادامه کار رو بریم یا نه ؟ برای اینکار از مجموعه follow استفاده میشه تا ببینیم کی رشته مربوط به یک غیر پایانی شروع میشه و بعد از اون پایانی که کاهشش دایدم چه نماد هایی می تونه بیاد.
از اسم هر دو مجموعه تقریبا معاومه به چه دردی میخوره. First یعنی غیرپایانی ها با چه پایانی هایی می تونن شروع بشن و ابتدای گرامر اون غیر پایانی هستن.
پیرو یا تعقیب یعنی چه رشته هایی بلافاصله بعد از غیر پایانی می تونه بیاد و اون غیر پایانی رو تعقیب می کنه .
۰
ارسال: #۴
  
RE: مشکل در مفهوم LR
(۲۷ خرداد ۱۳۹۲ ۱۲:۲۴ ق.ظ)M.Amin.M نوشته شده توسط: سلام دوستای خوبممجموعهfirstمربوط به aپایانه هایی رامشخص می کند که رشته های مشتق شده از aبا آنها شروع می شوند اگر aبتواند [tex]\varepsilon[/tex]
من دارم کامپایلر میخونم، واقعا گیج شدم، خیلی دوس دارم مفهومشو بفهمم ولی هر چی زور میزنم یه چیزایی میفهمم ولی کافی نیست.
مثلا در پارسینگ های LR من خیلی سعی کردم مفهومشو بفهمم، ببینم واقعاچه اتفاقی میفته ولی فایده ای نداشت.یا مثلا first وfollow، مفهومشون چیه؟چه اتفاقی میفته؟
توی این جدول تجزیه هم مفهومو نمیفهمم، الان این عبارتی که توی پشته ریخته میشه،در واقعیت یعنی چی؟اصلا گیج شدم، بلدم مسئله حل کنما ولی مفهومش خیلی برام نامفهومه.
امیدوارم منظورمو درست رسونده باشم.
تشکر میکنم.
را تولید کند به مجموعه first اضافه می شود مثال:
با توجه به گرامر first(BCd) می شود :a b e a[tex]A \rightarrow BCd ---- B \rightarrow bB\mid e \mid \varepsilon---- C \rightarrow aC\mid \varepsilon[/tex]
lمجموعه follow(A) پایانه هایی را مشخص می کند که در اشتقاق های مختلف بلافاصله در سمت راست Aقرار می گیرند - یعنی آخرین پایانه ای که توسط Aتولید می شود.
در مورد روش های LRمن LR(0) رو فقط مطالعه کردم
منبع کامپایلر پیام نور ص ۱۴۴
۰
ارسال: #۵
  
مشکل در مفهوم LR
سوال بگذارید باهم حل کنیم. مرحله به مرحله.
در بین حل، به مفهوم هم می پردازیم.
در بین حل، به مفهوم هم می پردازیم.
۰
ارسال: #۶
  
مشکل در مفهوم LR
ممنون از اینکه جواب دادین، دوستان من دنبال مفهوم این مباحث هستم، یعنی دوس دارم بدونم first وfollow چیکار میکنن،قشنگ بلدم سوالو حل کنم، فقط رفتم قواعدو یاد گرفتم.
اصلا نمیفهمم این قواعد دارن چه کاریو پشت پرده انجام میدن.
چشم یه سوال میذارم باهم حلش کنیم ومفهومشو بهم بگین.مثلا همین سوالی که دوستمون گذاشتن، الان مفهوم first و followچیه؟این first وfollow چی هستن؟برا بدست آوردنشون بلدم چیکار کنم ولی میخوام مفهومشو بفهمم.
حالا یه سوال درمورد LR هم میذارم تا مفهومی جلو بریم، درحال حاضرمفهومfirst و follow چیه؟
نمیدونم میتونم منظورمو برسونم یانه!
تشکر بخاطر پیگیریتون و جواب دادنتون.خیلی مررررسی.
اصلا نمیفهمم این قواعد دارن چه کاریو پشت پرده انجام میدن.
چشم یه سوال میذارم باهم حلش کنیم ومفهومشو بهم بگین.مثلا همین سوالی که دوستمون گذاشتن، الان مفهوم first و followچیه؟این first وfollow چی هستن؟برا بدست آوردنشون بلدم چیکار کنم ولی میخوام مفهومشو بفهمم.
حالا یه سوال درمورد LR هم میذارم تا مفهومی جلو بریم، درحال حاضرمفهومfirst و follow چیه؟
نمیدونم میتونم منظورمو برسونم یانه!
تشکر بخاطر پیگیریتون و جواب دادنتون.خیلی مررررسی.
۰
ارسال: #۷
  
مشکل در مفهوم LR
تشکر ویژه
آره اینا رو قشنگ فهمیدم.
الان مفهوم first و follow هم برام روشن شد، ممنون.
واما میریم جلوتر ومباحث سخترررررر!!! مثال میزنم که راحت تر باشه
ایشالا فردا، الان خوابم گرفته، تشکر بچه ها.
درمورد پاسخ دوست عزیزمونesi
خیلی ممنون جواب دادین، ولی من این قسمت از صحبتاتونو متوجه نمیشم، میشه یکم باز ترش کنین؟
"آیا می تونیم قسمتی از رشته های ورودی رو که خوندیم به یه غیر پایانی کاهشش بدیم و ادامه کار رو بریم یا نه ؟ برای اینکار از مجموعه follow استفاده میشه تا ببینیم کی رشته مربوط به یک غیر پایانی شروع میشه و بعد از اون پایانی که کاهشش دایدم چه نماد هایی می تونه بیاد."
تشکر.
ازهمه دوستان تشکر میکنم.
آره اینا رو قشنگ فهمیدم.
الان مفهوم first و follow هم برام روشن شد، ممنون.
واما میریم جلوتر ومباحث سخترررررر!!! مثال میزنم که راحت تر باشه
ایشالا فردا، الان خوابم گرفته، تشکر بچه ها.
درمورد پاسخ دوست عزیزمونesi
خیلی ممنون جواب دادین، ولی من این قسمت از صحبتاتونو متوجه نمیشم، میشه یکم باز ترش کنین؟
"آیا می تونیم قسمتی از رشته های ورودی رو که خوندیم به یه غیر پایانی کاهشش بدیم و ادامه کار رو بریم یا نه ؟ برای اینکار از مجموعه follow استفاده میشه تا ببینیم کی رشته مربوط به یک غیر پایانی شروع میشه و بعد از اون پایانی که کاهشش دایدم چه نماد هایی می تونه بیاد."
تشکر.
ازهمه دوستان تشکر میکنم.
۰
ارسال: #۸
  
مشکل در مفهوم LR
یعنی اگر به یه نقطه ای رسیدیم که دیگه متغیر جاری که در حال بسطش هستید( یعنی اون متغییری که داریم باهاش جلو می ریم)، دیگه نتونستیم ادامه بدیم، ادامه کار رو با کدوم متغیر دیگه باید ادامه بدیم، فرض کنید ورودی a رو داریم و داریم با s جلو میریم، حال به نقطه رسیدیم که s با a نمی تونیم جلو بریم پس باید دنبال یه B بگردیم که با هاش بتونیم a رو ادامه بدیم یا به عبارتی a جز مجموعه fisrt(B) p باشه( P الکیه) و یا اینکه a بلافاصله بعد از s در یک غیر پایانی دیگه مثل A اومده مثلا A->FGSa باشه که F,G غیر پایانی هایی که قبلا گسترششون داریم، S غیر پایانی جاری که دیگه با a نمی تونه ادامه بده و چون a در مجموعه Follow(s)p هستش شما می تونید s رو کاهش بدید و دویاره به غیر پایانی A برگردید و رشته طبق A از ورودی بخونید و ادامه کار ...
Can I see some ID?
Feeling left out?
نگران نباش، فقط روی این لینک برای ثبت نام کلیک کن. رمزت رو فراموش کردی؟ اینجا به یادت میاریم! close