۲
subtitle
ارسال: #۱
  
محاسبه روابط تقدم در تقدم عملگر ساده
سلام
دوستان من کامپایلرو خوب خوندم و اکثر جاها شو خوب بلدم ولی این روابط تقدم عملگر ساده بدجور اعصابمو خورد کرده، نمیدونم من بد متوجه شدم یا... خلاصه همیشه چنتا مورد تو جدول تجزیه اش هست که من نمیدونم چجوری بدست آورده یا مثلا به روشی که میرم بعضی جاها باید دوتا رابطه قرار بگیره
یه مثال میزنم تا بفهمید مشکلم کجاست
این گرامرمون:
۱) E->+ET|T
۲) T->*TF|F
۳) F->id
اینا هم head و tail:
{Head(E)={+,*,id,T,F
{Tail(E)={id,T,F
{Head(T)={*,id,F
{Tail(T)={id,F
{Head(F)={id
{Tail(F)={id
حالا بر اساس قاعده E->+ET مگه نباید بگیم :
(Head(E > + {یعنی هر چی تو مجموعه هد E داریم > + }
که میشه {+,*,id,T,F}>+ و
(Tail(E)>Head(T
که میشه {id,T,F}>{*,id,F} و
(E<Head(T
که میشه {E<{*,id,F
از طرفی هم چون داریم T->*TF پس داریم T=F
تا اینجا درسته؟
پس یعنی دوتا رابطه بین T,F هست یکی: T=F و یکی T>F ولی تو جدول تقدمش فقط مساوی رو گذاشته...
اگه اشتباه میکنم لطفا بگین کجارو بد حساب میکنم مرسی،
آخه تو خیلی از مثالاش این مشکل پیش میاد، بعید میدونم اشتباه حل کرده باشه. این مشکل مخصوصا تو مواردی که دوتا غیر پایانی کنار هم داریم پیش میاد...
تصویر حل سوال تو مدرسانو هم میذارم ببینین
دوستان من کامپایلرو خوب خوندم و اکثر جاها شو خوب بلدم ولی این روابط تقدم عملگر ساده بدجور اعصابمو خورد کرده، نمیدونم من بد متوجه شدم یا... خلاصه همیشه چنتا مورد تو جدول تجزیه اش هست که من نمیدونم چجوری بدست آورده یا مثلا به روشی که میرم بعضی جاها باید دوتا رابطه قرار بگیره
یه مثال میزنم تا بفهمید مشکلم کجاست
این گرامرمون:
۱) E->+ET|T
۲) T->*TF|F
۳) F->id
اینا هم head و tail:
{Head(E)={+,*,id,T,F
{Tail(E)={id,T,F
{Head(T)={*,id,F
{Tail(T)={id,F
{Head(F)={id
{Tail(F)={id
حالا بر اساس قاعده E->+ET مگه نباید بگیم :
(Head(E > + {یعنی هر چی تو مجموعه هد E داریم > + }
که میشه {+,*,id,T,F}>+ و
(Tail(E)>Head(T
که میشه {id,T,F}>{*,id,F} و
(E<Head(T
که میشه {E<{*,id,F
از طرفی هم چون داریم T->*TF پس داریم T=F
تا اینجا درسته؟
پس یعنی دوتا رابطه بین T,F هست یکی: T=F و یکی T>F ولی تو جدول تقدمش فقط مساوی رو گذاشته...
اگه اشتباه میکنم لطفا بگین کجارو بد حساب میکنم مرسی،
آخه تو خیلی از مثالاش این مشکل پیش میاد، بعید میدونم اشتباه حل کرده باشه. این مشکل مخصوصا تو مواردی که دوتا غیر پایانی کنار هم داریم پیش میاد...
تصویر حل سوال تو مدرسانو هم میذارم ببینین
۰
ارسال: #۲
  
RE: محاسبه روابط تقدم در تقدم عملگر ساده
(۲۳ دى ۱۳۹۲ ۰۶:۴۹ ب.ظ)firouziam نوشته شده توسط: سلام
دوستان من کامپایلرو خوب خوندم و اکثر جاها شو خوب بلدم ولی این روابط تقدم عملگر ساده بدجور اعصابمو خورد کرده، نمیدونم من بد متوجه شدم یا... خلاصه همیشه چنتا مورد تو جدول تجزیه اش هست که من نمیدونم چجوری بدست آورده یا مثلا به روشی که میرم بعضی جاها باید دوتا رابطه قرار بگیره
یه مثال میزنم تا بفهمید مشکلم کجاست
این گرامرمون:
۱) E->+ET|T
۲) T->*TF|F
۳) F->id
اینا هم head و tail:
{Head(E)={+,*,id,T,F
{Tail(E)={id,T,F
{Head(T)={*,id,F
{Tail(T)={id,F
{Head(F)={id
{Tail(F)={id
حالا بر اساس قاعده E->+ET مگه نباید بگیم :
(Head(E > + {یعنی هر چی تو مجموعه هد E داریم > + }
که میشه {+,*,id,T,F}>+ و
(Tail(E)>Head(T
که میشه {id,T,F}>{*,id,F} و
(E<Head(T
که میشه {E<{*,id,F
از طرفی هم چون داریم T->*TF پس داریم T=F
تا اینجا درسته؟
پس یعنی دوتا رابطه بین T,F هست یکی: T=F و یکی T>F ولی تو جدول تقدمش فقط مساوی رو گذاشته...
اگه اشتباه میکنم لطفا بگین کجارو بد حساب میکنم مرسی،
آخه تو خیلی از مثالاش این مشکل پیش میاد، بعید میدونم اشتباه حل کرده باشه. این مشکل مخصوصا تو مواردی که دوتا غیر پایانی کنار هم داریم پیش میاد...
تصویر حل سوال تو مدرسانو هم میذارم ببینین
برای اینکه بشه روش تقدم ساده استفاده کرد باید سمت راست هیچ دو قاعده ای از نظر قرارگیری ترمینال و غیرترمینال یکسان نباشه که همون جور که میبینیم این شرط نقض شده و نمیشه از تقدم ساده برا این روش استفاده کرد ...
ارسال: #۳
  
RE: محاسبه روابط تقدم در تقدم عملگر ساده
(۲۴ دى ۱۳۹۲ ۰۹:۲۶ ب.ظ)mhma_1367 نوشته شده توسط: برای اینکه بشه روش تقدم ساده استفاده کرد باید سمت راست هیچ دو قاعده ای از نظر قرارگیری ترمینال و غیرترمینال یکسان نباشه که همون جور که میبینیم این شرط نقض شده و نمیشه از تقدم ساده برا این روش استفاده کرد ...
ممنون از پاسختون، ولی به نظورتون کجای گرامر این شرطو نقض کرده؟ قواعد E->T و T->F ؟ آخه من این قواعدو تو خیلی گرامرها دیدم که بدون مشکل با تقدم ساده پارسش کردن!
۰
ارسال: #۴
  
RE: محاسبه روابط تقدم در تقدم عملگر ساده
منم همین مشکلو دارم!!!!
کسی جوابو نمی دونه؟
مشکل من فقط این نیست مثلا واسه گرامر زیر:
lS->(SS)l
S->c
که تو اکثر کتابا هم هست برای SS اگه برای اولین S ما tail(s)=c رو در نظر بگیریم و s دوم رو هم بهش دست نزنیم ( دو تا شرطی که معمولا با or برای بزرگتری نوشته شده) رابطه c>S باید وجود داشته باشه که توی جدول خالیه!!!
نمی دونم کجا رو اشتباه می کنیم لطفا کمک کنید.
کسی جوابو نمی دونه؟
مشکل من فقط این نیست مثلا واسه گرامر زیر:
lS->(SS)l
S->c
که تو اکثر کتابا هم هست برای SS اگه برای اولین S ما tail(s)=c رو در نظر بگیریم و s دوم رو هم بهش دست نزنیم ( دو تا شرطی که معمولا با or برای بزرگتری نوشته شده) رابطه c>S باید وجود داشته باشه که توی جدول خالیه!!!
نمی دونم کجا رو اشتباه می کنیم لطفا کمک کنید.
Can I see some ID?
Feeling left out?
نگران نباش، فقط روی این لینک برای ثبت نام کلیک کن. رمزت رو فراموش کردی؟ اینجا به یادت میاریم! close