پروژه یک کامپایلر برای یک زیرمجموعه ساده از زبان ++C پیاده سازی می کنند. این زیرمجموعه
شامل ویژگی هایی مانند اعالن متغیرها، عبارات ریاضی، ساختارهای کنترلی )مانند شرطی و حلقه( و فراخوانی
توابع می باشد. هدف اصلی این پروژه، درک عمیق از مراحل اولیه ترجمه کد از منبع به نمایش درونی است که
شامل مراحل تحلیل لغوی، نحوی و معنایی می شود. فاز تولید نمایش میانی نیز به صورت اختیاری اضافه می گردد .
فاز 1 :تحلیل لغوی
توکنایزر( 1.1
یک توکن دنباله ای از کاراکترها است که می تواند به عنوان یک واحد در گرامر زبان های برنامه نویسی در نظر
گرفته میشود.
وظایف :
• تعریف الگوها :تعریف عبارات منظم (Expressions Regular (برای شناسایی هر یک از انواع
توکن ها مانند شناسه، کلمه کلیدی، عملگر، عدد و غیره.
• پردازش ورودی :خواندن فایل منبع و حذف فضای خالی، تب ها، خطوط خالی و کامنتها.
• تشخیص خطا :شناسایی توکنهای نامعتبر و ارائه پیغام خطای مناسب.
• تولید توکن ها :ایجاد لیستی از توکن ها که به فاز بعدی )تحلیل نحوی( منتقل می شود.
)کلمات کلیدی:
3.1 )برای اعالن متغیرها و توابع )مانند int ،float ،void ،return ،و غیره )
4.1 )شامل کلمات کلیدی مربوط به ساختارهای کنترلی )مانند if ،while. ،for(
(Identifiers):شناسهها( 1.5
6.1 )نام متغیرها، نام توابع، نام کالس ها و سایر شناسه های مورد استفاده در برنامه .
(Literals):اعداد( 1.7
8.1 )اعداد صحیح و اعشاری که در برنامه استفاده می شوند .
(Operators):عملگرها( 1.9
10.1 )عملگرهای ریاضی )مانند +، -، *، /)
11.1 )عملگرهای مقایسه ای و منطقی مانند ==، =!، >، || ,&& ,<
(Punctuations):نگارشی عالئم( 1.12
13.1 )نقطه ویرگول(;) ، پرانتزهای باز و بسته)) ، ((، آکوالدها}) ، ({، کاما(,) ، و سایر عالئم مورد نیاز برای
تعیین ساختار کد .
(Comments):کامنتها( 1.14
15.1 )کامنتهای تک خطی
16.1 )کامنتهای چندخطی
(Function Definitions): توابع تعاریف( 1.17
18.1 )تشخیص توکن های مربوط به تعریف تابع شامل نوع بازگشتی )مانند int ،voidو غیره(، نام تابع،
پرانتزهای باز و بسته برای لیست پارامترها، و آکوالدهای باز و بسته برای بدنه تابع.
19.1 )خطاهای نحوی اولیه :
20.1 )در صورتی که یک توکن ناشناخته یا غیرمجاز شناسایی شود )مثالً یک کاراکتر غیرمجاز یا ترکیبی
که با هیچ الگوی تعریف شده مطابقت ندارد(، فاز تحلیل لغوی می تواند خطای نحوی را تولید کند .
21.1 )این خطاها معموالً به صورت پیغامهایی مبنی بر "کاراکتر نامعتبر" یا "توکن ناشناخته" ارائه
می شوند .
22.1 )تشخیص خطا
باید تشخیص خطا را در این کار پیاده سازی کنی د که شامل تجزیه و تحلی ل خطاهای لغوی مانند
غلط امالیی در کلمات کل ید ی یا نمادهای تعری ف نشده را تشخیص می دهد.
بخش2 :تجزیه و تحلی ل نحوی
1.2 )گرامر ها
در این بخش، شما باید تجزی ه کنندهای را پیاده سازی کنی د که دنباله ای از توکن های تولید شده توسط
تحلیل گر لغوی را می گیرد و تعیین م ی کند که آیا ساختار نحوی معتبر ی را مطابق با دستور زبان تشکیل
می دهند یا نه .
قوانین گرامری را برا ی ساختارهای زیر پیاده سازی کنید:
• Variable declarations
• Expressions (arithmetic and logical)
• Conditional statements (if, else)
• Loops (while)
• Function definitions and calls
2.2 )ساخت درخت تجزیه
توکن ها را به درخت تجزیه ی ا درخت نحو انتزاعی )AST )تبد یل کنید .
3.2 )تشخیص خطا
تشخیص خطاهای نحو ی مانند نبود semicolon و عدم تطابق پرانتز ها
بخش3 :تحلیلگر معنایی
1.3 )تشخیص خطا
در فاز 3 ( تحلیل معنایی(، پس از ساخت درخت نحو (AST (در فاز تحلیل نحوی، کامپایلر بر روی این درخت
بررسیهای عمیق تری انجام میدهد تا معنای صحیح برنامه تضمین شود. در این فاز، موارد زیر مورد بررسی قرار
می گیرند :
جدول نمادها :(Table Symbol (
o ایجاد و نگهداری جدول نمادها برای ذخیره اطالعات مربوط به شناسه ها )مانند متغیرها، توابع
و کالس ها(.
o اطمینان از اعالن متغیرها قبل از استفاده و بررسی عدم وجود اعالن تکراری.
• بررسی نوع داده ها:(Checking Type (
o اطمینان از سازگاری انواع دادهها در عبارات و عملیاتها )مانند جمع، تفریق، ضرب، تقسیم(.
o بررسی تبدیل های نوع (Casting Type (در مواقعی که الزم است و گزارش خطا در صورت
ناسازگاری.
• اعتبارسنجی استفاده از توابع و تعریف توابع :
o اطمینان از اینکه توابع قبل از فراخوانی به درستی اعالن شدهاند و تعداد و نوع پارامترهای
ارسالی مطابق با تعریف تابع است.
o بررسی وجود یک تابع main( در زبان هایی که نیازمند آن هستند( یا سایر توابع اصلی مورد
نیاز.
• مدیریت دامنه (Scope (و دسترسی :
o کنترل دامنه های متغیرها )مثالً بلوک های مختلف یا توابع( و اطمینان از دسترسی صحیح به
متغیرها بر اساس دامنه تعریفشده.
o بررسی استفاده از متغیرهای محلی و سراسری و جلوگیری از تداخل اسامی.
• تشخیص خطاهای معنایی :
o استفاده از شناسه های اعالن نشده :مثالً استفاده از متغیر یا تابعی که قبالً اعالن نشده
است.
تکراری :تالش برای اعالن یک متغیر یا تابع با نامی که قبالً در همان دامنه اعالن شده
است.
o ناسازگاری نوع :اعمال عملیات روی داده هایی با نوع های ناسازگار )مانند جمع عدد صحیح با
رشته(.
o خطاهای مربوط به فراخوانی تابع :عدم تطابق تعداد یا نوع پارامترهای ارسالی با تعریف تابع .
نمونه های ورودی و خروجی از هر فاز:
نمونه کد ورودی:
int main(){
// variable declaration
int x;
x = 10 ;
int y ;
y = x+5*(3+2)
return 0 ;
}
نمونه خروجی فاز اول:
دنباله ای از توکن ها و نوع آنه
نمونه خروجی ها در فایل آپلود شده هست
این آگهی از وبسایت کارلنسر پیدا شده، با زدن دکمهی تماس با کارفرما، به وبسایت کارلنسر برین و از اونجا برای این شغل اقدام کنین.
هشدار
توجه داشته باشید که دریافت هزینه از کارجو برای استخدام با هر عنوانی غیرقانونی است. در صورت مواجهه با موارد مشکوک، با کلیک بر روی «گزارش مشکل آگهی» به ما در پیگیری تخلفات کمک کنید.