100% Guaranteed Results


Exercises – Solved
$ 24.99
Category:

Description

5/5 – (1 vote)

به نام خدا
فاز سوم پروژه کامپایلرها و زبانهای برنامهنویسی

پاییز 99
مهلت تحویل: 7 دی

در این فاز پروژه، قرار است تحلیل معنایی زبان Sophia را که در فاز قبلی آغاز کردید به اتمام برسانید. بدین منظور شما قوانین بررسی نوع 1را پیادهسازی خواهید کرد. برای تعیین قوانین از اطلاعات بیانشده در ادامه استفاده کنید.
نوع
همانطور که میدانید هر نوع زیرنوع2 خودش است )رابطه انعکاسی میان نوعها وجود دارد(. به عنوان مثال int<:int است. همچنین رابطهی وراثت یک رابطهی زیرنوع میان کلاسها ایجاد میکند. برای مثال اگر B از A ارثبری کرده باشد) B فرزند A باشد( آنگاه B<:A برقرار است.
Overloading
در زبان Sophia تنها عملگرهای == و =! و تابع print به صورت overloaded تعریف شدهاند .در عبارات e1 == e2 و e1 != e2 باید نوع e1 و e2 یکسان باشد. این دو عملگر روی تمام نوعها بجز لیست تعریف شدهاند .توجه داشته باشید در صورتی که یک عملوند آنها از نوع کلاس یا اشارهگر تابع باشد، عملوند دیگر میتواند null نیز باشد.
در فراخوانی print(e) عبارت e میتواند از نوع string،int و یا bool باشد.
عملگرهای دیگر را طبق جدول زیر بررسی کنید:

1 Type check
2 Subtype
نوع عملوند)ها( عملگرها
int ضرب)*(، تقسیم)/(، باقیمانده)%(، جمع)+(، تفریق)-(، منفی تک عملوندی)-(، تک عملوندی پیشوندی و پسوندی)– و ،(++ بزرگتر)<(، کوچکتر(>)
bool عطف منطقی)&&(، فصل منطقی)||(، نقیض منطقی(!)

فراخوانی متدها
با توجه به اینکه در زبان overloading ،Sophia و overriding برای تعریف متدها نداریم ،هنگام فراخوانی یک متد یک کلاس، باید آن کلاس متد فراخوانی شده را داشته باشد و تعداد آرگومانهای فراخوانی با تعریف یکسان و نوع آنها زیرنوعی از آرگومانهای تعریف شده باشد.
تخصیص
تخصیص عبارت e:T فقط به متغیری از نوع S امکان پذیر است که T<:S باشد.
This
this همواره نوع کلاسی که در حوزهی آن فراخوانی شده است را خواهد داشت.

لیست خطاها
در این فاز لازم است در صورتی که در بررسیهای نام 3خطایی وجود نداشت، موارد زیر را بررسی کنید و در صورت خطا، پیام مناسب را به فرمتی که برای هر خطا گفته شده چاپ کنید و به بررسی کد تا انتهای فایل ادامه دهید. برای اینکه خطا در یک قسمت روی تمام قسمتهای دیگر اثر نگذارد ،فرض میکنیم که تمامی متغیرهایی که در نوع خود خطا دارند از یک نوع پیشفرض به نام NoType هستند) NoType زیرنوع تمامی نوعهای دیگر است.( نوع عباراتی که در نوع خود خطا دارند نیز از همان نوع NoType است.
فرمت کلی هر یک از خطاهایی که باید نمایش دهید به شکل زیر است:
Line:<LineNumber>:<ErrorItemMessage>
مثال:
Line:22:Main class is not found
کهErrorItemMessage برای هر یک از موارد زیر تعریف میشود:
1. عدم ارجاع به متغیری که تعریف نشده است
ErrorItemMessage: Variable <VariableName> is not declared

2. عدم ارجاع به کلاسی که تعریف نشده است
ErrorItemMessage: Class <ClassName> is not declared

3. وجود فیلد و متد کلاس در هنگام فراخوانی
توجه داشته باشید ممکن است فیلد یا متد در خود کلاس موجود نباشد و در اجداد آن موجود باشد.
ErrorItemMessage: There is no member named <MemberName> in class <ClassName>

Name Analysis 3
4. مجاز بودن نوع هنگام استفاده از عملگرها
در عملگرهای دوتایی، در صورتی که یک عملوند از نوع NoType باشد، این خطا باید برای عملوند دیگر بررسی شود.
ErrorItemMessage: Unsupported operand type for operator
<OperatorName>

5. استفاده از نوع bool در شرط ساختار تصمیمگیری و ساختار تکرار نوع شرط در عبارت if و عبارت وسط for باید از نوع bool باشد.
ErrorItemMessage: Condition must be bool

6. عدم تخصیص به عملوند rvalue
ErrorItemMessage: Left side of assignment must be a valid lvalue

7. lvalue بودن عملوندهای ++ و – – )چه به صورت پیشوندی چه پسوندی( به عنوان مثال 22++ قابل قبول نیست.
ErrorItemMessage: Lvalue required as <OperatorName> operand

8. قابل فراخوانی بودن در هنگام فراخوانی
فراخوانی باید روی اشارهگر تابع و یا متدهای کلاسها صورت گیرد.
ErrorItemMessage: Calling a non-callable

9. استفاده از break و continue داخل حلقهی تکرار
ErrorItemMessage: Break statement not within loop
یا
ErrorItemMessage: Continue statement not within loop

11. مجاز بودن نوع ورودی تابع print
ErrorItemMessage: Unsupported type for print

11. عدم تعریف لیست خالی تعریف لیست به صورتی که طول آن 0 باشد، مجاز نیست )مانند list(0 # int)(.
ErrorItemMessage: Cannot have empty list

12. عدم استفاده از عبارت به جای مقدار ثابت integer به عنوان اندیس عناصر لیستی که نوع همهی اعضای آن باهم یکسان نیست
ErrorItemMessage: Expression cannot be used as index of multitype list

13. عدم استفاده از مقدار بازگشتی تابعی که نوع بازگشتی آن void تعریف شده است
ErrorItemMessage: Cannot use return value of a method having void return type

14. بررسی نوع مقدار بازگشتی در هنگام استفاده از دستورreturn با نوع بازگشتی تابع نوع مقدار بازگشتی باید زیرنوع نوع بازگشتی تابع باشد.
ErrorItemMessage: Return value does not match with method return type

15. تطابق آرگومانهای متدها )بجز constructor( با تعریف آنها در هنگام فراخوانی در این قسمت و قسمت بعد ،نوع آرگومانهای متناظر باید زیرنوع نوع تعریف شده برای آن در تعریف تابع باشد.
ErrorItemMessage: Args in method call do not match with definition

16. تطابق آرگومانهای constructor با تعریف آن در هنگام فراخوانی
ErrorItemMessage: Constructor args do not match with definition of class <ClassName>

17. تطابق اسم constructor با اسم کلاس
ErrorItemMessage: Constructor name does not match with class name

18. عدم وجود دو شناسهی یکسان برای عناصر لیست
در صورتی که چندین عنصر شناسهی یکسانی داشتند این خطا باید تنها یک بار چاپ شود )به ازای هر لیست این خطا تنها یک بار چاپ میشود.( توجه داشته باشید در صورتی که عنصری از لیست خود یک لیست باشد این بررسی باید برای آن عنصر هم صورت گیرد )و در صورت وجود خطا، چاپ شود.(
ErrorItemMessage: List elements cannot have the same id

19. لیست بودن نوع پیمایششونده در حلقهی foreachنوع سمت راست in باید از نوع لیست باشد.
ErrorItemMessage: Foreach cannot iterate over a non-list

21. یکسان بودن نوع عناصر لیست در حلقهی foreach
توجه داشته باشید که در هنگام بروز این خطا پیمایششونده لیستی است که نوع همه اعضای آن باهم یکسان نیست.
ErrorItemMessage: Foreach list elements do not have the same type

21. یکسان بودن نوع پیمایشکننده با نوع عناصر لیست در حلقهی foreach
نوع سمت چپ in باید با نوع عناصر لیست سمت راست آن برابر باشد. در صورتی که خطای قسمت قبل رخ داده باشد، باید نوع پیمایشکننده با عنصر اول لیست مقایسه شود.
ErrorItemMessage: Foreach variable <VariableName> and list elements types do not match

22. عدم دسترسی به عناصر متغیری که از نوع لیست نباشد
ErrorItemMessage: Access by index on a non-list

23. integer بودن نوع اندیس در هنگام دسترسی به عناصر لیست
ErrorItemMessage: List index is not an integer

24. وجود عنصر لیست با شناسهی استفاده شده
ErrorItemMessage: There is no element named <Name> in the list
25. وجود کلاس Main
ErrorItemMessage: Main class is not found

26. عدم ارثبری کلاس Main از کلاس دیگر
ErrorItemMessage: Main class cannot extend from any class

27. عدم ارثبری کلاسها از کلاس Main
ErrorItemMessage: Classes cannot extend from Main class

28. Main در کلاس constructor وجود
ErrorItemMessage: No constructor found for Main class

29. عدم تعریف آرگومان در constructor کلاس Main
ErrorItemMessage: Main constructor cannot have arguments

31. عدم دسترسی به اعضای متغیری که از نوع کلاس یا لیست نباشد
ErrorItemMessage: Object or list member access on an expression that is neither a list nor an object

31. وجود گزاره return در تابعی که نوع بازگشتی آن void نباشد )امتیازی(
ErrorItemMessage: Method <MethodName> needs return statement

32. عدم وجود گزارههای دسترسناپذیر )امتیازی(
این خطا برای گزارههایی چاپ میشود که در روند اجرای برنامه دسترسناپذیرند که شامل گزارههایی است که در یک حلقه بعد از break و continue میآیند و گزارههایی که بعد از دستور return میآیند. در صورتی که چند گزارهی دسترسناپذیر پشت سر هم آمده باشند، خطا تنها برای اولین گزاره چاپ میشود.
ErrorItemMessage: Statements are unreachable

نکته: در صورت وجود بعضی خطاها در یک متغیر، خطاهای مرتبط نباید بررسی شوند، مانند:
 در صورت وجود خطای قسمت 8، خطاهای قسمتهای 13 و 11 برای آن فراخوانی بررسی نمیشوند.
 در صورت وجود خطای قسمت 19، خطاهای قسمتهای 20 و 21 برای آن پیمایششونده بررسی نمیشوند.

همچنین در حالتی که پس از پیمایش کامل کد ورودی هیچ خطایی نداشته باشد ،برنامه شما باید خروجی زیر را چاپ کند:
Compilation successful

نکات مهم:
 در این فاز شما باید کدهای داده شده را تکمیل کنید .خطاها و visitorها به شما داده شده و باید از آنها استفاده کنید .کلیه فایل ها را به صورت یک فایل P3_<studentID1>_<studentID2>.zip آپلود کنید )کدهای جدول علائم و گرامر و AST و visitor را هم در آن قرار دهید(. توجه شود که تنها یک نفر از هرگروه باید پروژه را آپلود کند. در صورت عدم رعایت این موارد از شما نمره کسر خواهد شد.
 در صورت کشف هر گونه تقلب، نمره 100- لحاظ میشود.
 دقت کنید که خروجیهای شما به صورت خودکار تست میشوند؛ پس نحوه چاپ خروجی شما باید عیناعیناً مطابق موارد ذکر شده در بالا باشد. تنها موارد خواسته شده را در فایل خروجی نمایش دهید و از قرار دادن خطهای خالی و فاصله و … نیز خودداری کنید. ترتیب چاپ مهم نیست و تنها کافیست تمامی خطاهای موجود چاپ شده باشند و خطای اضافی چاپ نشده باشد.
 در صورتی که قبل از کلاسهای رفع اشکال سوالی برایتان پیش آمد، میتوانید زودتر آنها را بپرسید تا ابهامات شما در ابتدای زمان پروژه برطرف شود و به ساعات پایانی موکول نشود .بهتر است سوالات خود را در فروم یا گروه درس مطرح نمایید تا دوستانتان نیز از آنها استفاده کنند؛ در غیر این صورت به مسئولان پروژه ایمیل بزنید:
amir.pma1378@gmail.com امیر پورمحمدعلی shbmobina@gmail.com مبینا شاهبنده

Reviews

There are no reviews yet.

Be the first to review “Exercises – Solved”

Your email address will not be published. Required fields are marked *

Related products