project.pdf

‫ب ن م خددا ودندد جاند و خردد‬
‫دس‬
‫نظر‌هیز ی زبا‌ناه و طراحید کامدپایل‌راه‬
‫زمان تحویلدپوژه‬
‫‪ ۶‬بهدمن‬
‫استاد دس‬
‫دکتدر ایدز ی‬
‫در این پروژه شما باید یه مفسر‪ 1‬برای زبان ‪ stCalc‬طراحی کنید‪ .‬این زبان‪ ،‬یک زبان ساده برای کار با رشتهاها است‪.‬‬
‫اکنون به بررسی مختصر ویژگیاهای این زبان میپردازیم‪:‬‬
‫یاهای کلی زبان‪:‬‬
‫الف – ویژگ ‌‬
‫‪ – 1‬ثوابت‪:‬‬
‫ثوابت در این زبان میوتوانند از نوع رشته و یا اعداد صحیح نامنفی باشند‪ .‬برای نشان داده یک ثابت از نوع رشته‪ ،‬آن رشته را در بین‬
‫عملمتاهای ” قرار میداهیم‪.‬‬
‫‪ – ۲‬متغی ‌راها‪:‬‬
‫متغیراها در زبان ‪ ،stCalc‬نتها اطلعات از نوع رشته را نگهداری میکنند‪ .‬برای وتعریف یک متغیر با نام ‪ x‬باید به شکل زیر عمل کنیم‪:‬‬
‫;‪Var x‬‬
‫بعد از وتعریف این متغیر‪ ،‬مقدار آن برابر با رشته وتهی ) “” ( خوااهد بود‪ .‬در صورت نیاز میوتوانیم در زمان وتعریف متغیر‪ ،‬به آن مقدارداهی‬
‫کنیم‪:‬‬
‫;”‪Var x = “abc‬‬
‫ سپل س است‪.‬‬
‫یپل ‌‬
‫قوانین وتعیین نام برای متغیراها در این زبان‪ ،‬دقیقا مشابه قوانین نامداهی به متغییراها در زبان س ‌‬
‫‪1 interpreter‬‬
‫لگ ‌راها‬
‫‪ – ۳‬عم ‌‬
‫در این زبان میوتوانیم از عملگراهای ‪ ^ ، - ،+‬و = بر روی رشتهاها استفاده کنیم‪:‬‬
‫‪.i‬‬
‫عملگر ‪+‬‬
‫با گرفتن دو رشته‪ ،‬حاصل الحاق دو رشته را باز میگرداند‪ .‬به عنوان مثال حاصل ” ‪ “ ab” +“ cd‬برابر‬
‫خوااهد بود‪.‬‬
‫” ‪“ abcd‬‬
‫‪ .ii‬عملگر ‪-‬‬
‫با گرفتن دو رشته‪ ،‬رشتهای را باز میگرداند که از حذف بزرگترین پسوند مشترک دو رشته از رشته اول به دست‬
‫میآید‪ .‬به عنوان مثال حاصل ” ‪ “ abcde ” – “ xyde‬برابر با ”‪ “ abc‬خوااهد بود‪.‬‬
‫‪ .iii‬عملگر ^‬
‫با گرفتن یک رشته و یک عدد صحیح ‪ ،k‬رشتهای را باز میگرداند که از ‪ k-1‬بار الحاق رشته اول با خودش به دست‬
‫میآید‪ .‬به عنوان مثال حاصل ‪ ab ^ 3‬برابر با ”‪ “ ababab‬خوااهد بود‪ .‬در صوروتی که عدد ‪ k‬برابر صفر باشد‪،‬‬
‫رشته وتهی بازگردانده خوااهد شد‪.‬‬
‫‪ .iv‬عملگر =‬
‫از این عملگر نیز برای ذخیره یک رشته در یک متغیر استفاده میکنیم‪.‬‬
‫اولویت اجرای عملگر اها به صورت زیر است‪:‬‬
‫^‬
‫اهمچنین میوتوانیم از پرانتز گذاری برای وتغییر وتروتیب اجرای عملگراها استفاده کنیم‪.‬‬
‫<‬
‫‪+, -‬‬
‫<‬
‫=‬
‫‪ – ۴‬وتوابع‪:‬‬
‫در این زبان وتنها چهار وتابع اصلی وتعریف شد‌هاند و قابل استفاده اهستند‪:‬‬
‫‪ .i‬وتابع‬
‫این وتابع یک خط را از ورودی استاندارد میخواند و رشته خوانده شده را بازمیگرداند‪) .‬کاراکتر اوتمام خط را به عنوان‬
‫بخشی از رشته در نظر نمیگیریم(‪.‬‬
‫) (‪ReadLine‬‬
‫‪ .ii‬وتابع‬
‫این وتابع رشته ‪ s‬را به صورت یک خط در خروجی چاپ میکند‪.‬‬
‫دقت کنید که وتنها این وتابع‪ ،‬خروجی ندارد‪.‬‬
‫)‪WriteLine( s‬‬
‫‪ .iii‬وتابع‬
‫این وتابع با گرفتن رشته ‪ ،s‬رشته معکو س آن را باز میگرداند‪) .‬خروجی این وتابع یک رشته است‪(.‬‬
‫)‪Reverse( s‬‬
‫‪ .iv‬وتابع‬
‫این وتابع رشتهای را باز میگرداند که از وتغییر اهمه زیررشتهاهای برابر ‪ a‬در ‪ ،s‬به رشته ‪ b‬به دست میآید‪.‬‬
‫)‪Replace( s , a , b‬‬
‫ب – ساختار کلی یک برنامه‪:‬‬
‫اهر برنامه در زبان ‪ ، stCalc‬از وتعدادی دستور وتشکیل میشود که به وتروتیب اجرا میشوند‪ .‬اهر دستور میوتواند یکی از ‪ ۳‬نوع زیر را داشته‬
‫باشد‪:‬‬
‫‪ .i‬عملیات انتساب‬
‫‪ .ii‬وتعریف متغیر‬
‫یشود‪(.‬‬
‫‪ .iii‬فراخوانی وتابع ‪) WriteLine‬وتنها وتابعی که خروجی ندارد و به وتنهایی یک دستور محسوب م ‌‬
‫بعد از اهر دستور باید از کاراکتر ; استفاده کنیم‪.‬‬
‫در زیر‌‪ ،‬یک برنام‌هی نمونه آمد‌هاست‪:‬‬
‫;)(‪Var x = ReadLine‬‬
‫;‪Var y‬‬
‫;)(‪y = ReadLine‬‬
‫;”‪Var a = “a‬‬
‫;‪Var z‬‬
‫;)‪x = Replace(x, “a”, z‬‬
‫;)”“ ‪y = Replace(y, a,‬‬
‫;)) ‪WriteLine(reverse( x + y‬‬
‫پ – شیو ‌هی اجرای مفسر‪:‬‬
‫مفسر شما باید با گرفتن یک برنامه با زبان ‪ stCalc‬به شکل یک فایل متنی‪ ،‬آن را اجرا کند‪ .‬برای اجرای برنامه‪ ،‬باید دستورات درون فایل‬
‫به وتروتیب اجرا شوند )در صورت رسیدن به وتوابع ‪ ReadLine‬یا ‪ WriteLine‬نیز ورودی گرفته شود و یا خروجی چاپ شود(‪.‬‬
‫در صورت مواجه شدن با اهرگونه خطای احتمالی )‪ Lexical Error, Syntax Error‬و یا استفاده از متغیراهای وتعریف نشده درون برنامه(‬
‫در زمان اجرای یک خط نیز‪ ،‬برنامه مفسر باید عبارت خطای مفهوم داری را چاپ کند و به اجرای برنامه خاوتمه داهد‪.‬‬
‫موارد وتحویلی‪:‬‬
‫•‬
‫گرامر ‪ LL1‬برای این زبان‬
‫•‬
‫لاهای ‪ First‬و ‪Follow‬‬
‫جدو ‌‬
‫•‬
‫جدول پار س ‪LL1‬‬
‫•‬
‫برنام‌هی مفسر‬