PDA

View Full Version : سوال: طراحی کامپایلر



zashesh
چهارشنبه 10 اسفند 1390, 20:01 عصر
سلام
میخواستم ببینم چه جور میشه یه کامپایلر ساده طراحی کرد
مرسی

tiphooo
جمعه 19 اسفند 1390, 03:57 صبح
شما باید اول قواعد زبان کامپایلر را تعریف کنید
یعنی به عنوان مثال اینکه هر برنامه چگونه شروع می شود ، چگونه پایان می یابد و دستورات در آن به چه صورت هستند بعد از پیاده سازی قواعد باید آن را نرمال کنید و سپس جدولی طراحی کنید جهت کنترل خطاهای برنامه (syntax) و جدولی جهت ذخیره اسامی متغیرها و طراحی یک پارسر جهت شناسایی متغیرها و identity ها . مرحله ساخت Linker از همه این مراحل پیچیده تر است
ولی در وهله اول شما قواعد را تعریف کنید و مرحله به مرحله که پیش رفتید خودتان مسئله را درک می کنید
جهت کنترل syntax و خطاهایی syntax که معمولا کامپایلرها می دهند توضیح کوتاهی بدهم اینکه مثلا شما دستور if مثلا در زبان C را در نظر بگیرید
if----> if Experision statment
else
statment
این یعنی اینکه دستور if حتما با کلمه کلیدی if شروع می شود و بعد Statment می آید
حال اینکه خود statment هم قواعدی دارد مثل
St---> (St)| (St Operation St)|{st}| id=st|
در اینجا operation هم می تواند قواعد زیر را داشته باشد
op---> +|-|*|/|%
و id هم قواعد خود را دارد
id---> Letters Id|Number
Number هم قواعد خود را دارد
Number---->0|1|2|3|4|5|6|7|8|9
به عنوان مثال در تعریف id ببینید اینجا طوری تعریف شده که نمی توان نام متغیر را با اعداد شروع کرد اگر شما دوست دارید در کامپایلرتان بتوان نام متغیرها با عدد هم بتواند شروع شود باید حالت Number Id را اضافه کنید
قواعد زبان به همین صورت رشد می کند و شما بعد از ساخت قاعده زبان باید ابهامات آن را برطرف کنید
در اینصورت کامپایلر مثلا جایی که انتظار عدد را دارد و با یک حرف برخورد می کند پیغام خطا بر می گرداند و متن پیام دست شماست
سوالی بود بپرسید