0% found this document useful (0 votes)
2 views

Lecture 1- Compiler Definition and Structure

Uploaded by

nanaqdi48
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
2 views

Lecture 1- Compiler Definition and Structure

Uploaded by

nanaqdi48
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 36

‫طراحی کامپایلر‬

‫تعریف و ساختار کامپایلر‬

‫میثم روستائی‬

‫‪1‬‬
‫زبانهای برنامهنویسی‬
‫➢ نرم‌افزارها به وسیله زبان‌های برنامه‌نویسی نوشته می‌شوند‪.‬‬

‫➢ با چه زبان‌هایی آشنا هستید؟‬

‫‪2‬‬
‫انواع زبانهای برنامهنویسی‪ :‬زبان سطح ماشین‬

‫➢ زبانی که در آن داده‌ها و دستورالعمل‌ها به صورت کدهای باینری نمایش داده‌ می‌شوند‬

‫➢ تنها زبانی است که کامپیوتر می‌تواند درک کند‪.‬‬

‫➢ هر ماشینی زبان ماشین مخصوص به خود را دارد‪.‬‬

‫➢ بدیهی است درک و یادگیری برنامه‌نویسی به زبان ماشین بسیار مشکل و زمان‌بر است‪.‬‬

‫‪3‬‬
‫انواع زبانهای برنامهنویسی‪ :‬زبان اسمبلی‬

‫➢ زبان اسمبلی به جای کدهای باینری از کلمات اختصاری استفاده‌می‌کند‪.‬‬

‫➢ خوانایی برنامه نسبت به زبان ماشین باالتر است‪.‬‬

‫➢ برنامه‌نویسی به زبان اسمبلی هم دشوار اما از زبان ماشین راحت‌تر است‪.‬‬

‫➢ برنامه زبان اسمبلی برای اجرا شدن باید ابتدا با استفاده از مترجمی به نام اسمبلر به زبان ماشین ترجمه شود‪.‬‬

‫‪4‬‬
‫انواع زبانهای برنامهنویسی‪ :‬زبان سطح باال‬

‫➢ زبان سطح باال به زبان انسان (زبان محاوره‌ای) نزدیک‌تر است و ساختارهای پیچیده مانند شرط و حلقه دارند‬
‫(مانند ‪ C++ ،C‬و ‪)...‬‬

‫➢ این برنامه‌ها به صورت مستقیم قابل اجرا نیستند و برای اجرا شدن بایستی توسط ابزاری به نام کامپایلر به زبان‬
‫ماشین ترجمه شود و یا توسط مفسر اجرا شود‪.‬‬

‫‪5‬‬
‫کامپایلر‬
‫➢ کامپایلر ابزاری است که برنامه نوشته شده به زبان سطح باال (زبان مبدا) را گرفته و سپس آن را به زبان ماشین‬
‫(زبان مقصد) ترجمه می‌کند‪.‬‬

‫➢ خروجی کامپایلر می‌تواند روی کامپیوتر اجرا شود‪.‬‬

‫برنامه‌مبدا‬

‫گزارش‌خطا‬ ‫کامپایلر‬ ‫برنامه‌مقصد‬

‫شکل‪‌:‬عملکرد‌کامپایلر‬

‫‪6‬‬
‫مفسر (‪)Interpreter‬‬

‫➢ مفسر ابزاری است که به جای اینکه مانند کامپایلر ابتدا کل برنامه زبان سطح باال را به زبان ماشین ترجمه کند و‬
‫سپس آن را اجرا کند‪ ،‬مستقیما و به صورت خط به خط کدها را اجرا می‌کند‪.‬‬

‫خطا‬

‫واکشی‌یک‌‬ ‫اجرای‌‌‌‬
‫برنامه‌مبدا‬
‫دستورالعمل‬ ‫دستورالعمل‬
‫پایان‬

‫شکل‪‌:‬عملکرد‌مفسر‬

‫‪7‬‬
‫کامپایلر و مفسر‬
‫➢ برنامه ترجمه شده توسط کامپایلر خیلی سریعتر از اجرا توسط مفسر است‪.‬‬

‫▪ بین نسخه کامپایل شده و ماشین هیچ واسطی وجود ندارد اما مفسر همیشه برای اجرای برنامه الزم است‪.‬‬

‫➢ مفسر در خطایابی نسبت به کامپایلر بهتر عمل می‌کند‪.‬‬

‫➢ برای اجرا فقط یک بار کامپایل برنامه کافی است اما برای اجرای برنامه توسط مفسر‪ ،‬همیشه به مفسر نیاز است‪.‬‬

‫‪8‬‬
‫استفاده ترکیبی از کامپایلر و مفسر‬
‫➢ با توجه به اینکه کامپایلر و مفسر هر دو مزایا و معایب خود را دارند‪ ،‬ترکیب آنها می‌تواند عملکرد بهتری داشته باشد‪.‬‬

‫➢ زبان جاوا ابتدا برنامه نوشته شده به زبان جاوا را به یک زبان میانی کامپایل می‌کند‪.‬‬

‫➢ یک مفسر‪ ،‬زبان میانی را بر روی هر ماشینی می‌تواند اجرا کند‪.‬‬

‫➢ وجود مفسر زبان جاوا برای اجرا الزم است‪.‬‬


‫‪Source Program‬‬

‫اجرای‌‌‌‬
‫دستورالعمل‬

‫‪Intermediate Program‬‬ ‫‪Virtual‬‬


‫‪output‬‬
‫‪input‬‬ ‫‪Machine‬‬

‫‪9‬‬
‫اولین کامپایلر‬
‫➢ کامپایلر خود یک برنامه کامپیوتری است که کد نوشته شده به یک زبان سطح باال را می‌گیرد و آن را به زبان‬
‫ماشین ترجمه می‌کند‪.‬‬

‫➢ برنامه کامپایلر خود توسط یک زبان نوشته شده و بنابراین برای اجرا باید کامپایل شود‪ .‬بنابراین برای نوشتن هر‬
‫کامپایلر به وجود کامپایلر دیگری نیاز است‪.‬‬

‫➢ اولین کامپایلر به زبان اسمبلی نوشته شده و با اسمبلر به زبان ماشین ترجمه شده است‪.‬‬

‫‪10‬‬
‫اجرای برنامه زبان سطح باال‬
‫فایل‌برنامه‬
‫➢ پیش پردازشگر‪ :‬اضافه کردن فایل‌ها و کتابخانه‌ها‪ ،‬پردارش دستورات ماکرو‬
‫پیش‌پردازشگر‬ ‫و پیش پردازنده‬

‫برنامه‌مبدا‬

‫کامپایلر‬

‫برنامه‌اسمبلی‬

‫اسمبلر‬

‫برنامه‌به‌زبان‌ماشین‌جابجاپذیر‬

‫بارکننده‌و‌ویرایشگر‌پیوند‬

‫برنامه‌به‌زبان‌ماشین‌مطلق‬
‫‪11‬‬
‫اجرای برنامه زبان سطح باال (ادامه)‬
‫فایل‌برنامه‬
‫➢ پیونددهنده‪ /‬بارکننده‪ :‬بعد از تبدیل برنامه به کد ماشین‪ ،‬بایستی تمامی موارد الزم‬
‫پیش‌پردازشگر‬ ‫مثال کدهای الزم برای اجرای دستور ‪ print‬یا گرفتن ورودی از کاربر نیز به برنامه‬
‫اضافه شوند که این وظیفه بر عهده پیونددهنده است‪.‬‬
‫برنامه‌مبدا‬

‫➢ سپس تمام برنامه بر روی حافظه اصلی بارگذاری و برای اجرا آماده می‌شود‪ .‬این‬
‫کامپایلر‬
‫وظیفه را ‪ Loader‬انجام می‌دهد‪.‬‬
‫برنامه‌اسمبلی‬

‫اسمبلر‬

‫برنامه‌به‌زبان‌ماشین‌جابجاپذیر‬

‫بارکننده‌و‌ویرایشگر‌پیوند‬

‫برنامه‌به‌زبان‌ماشین‌مطلق‬
‫‪12‬‬
‫ساختار کامپایلر‬
‫➢ فرض کنید ‪ N‬زبان برنامه نویسی و ‪ K‬ماشین با معماری مختلف داریم‪ .‬طبیعی است برای اجرای هر برنامه بر روی یک‬
‫ماشین یک کامپایلر مجزا الزم است‪ .‬در این صورت بایستی ‪ N×K‬کامپایلر طراحی کنیم‪.‬‬

‫زبان ‪1‬‬ ‫زبان ‪2‬‬ ‫زبان ‪3‬‬ ‫…‬ ‫زبان ‪n‬‬

‫کامپایلر ‪1‬‬ ‫کامپایلر ‪2‬‬ ‫کامپایلر ‪3‬‬ ‫…‬ ‫کامپایلر ‪K‬‬

‫کد نهایی برای‬ ‫کد نهایی برای‬ ‫کد نهایی برای‬ ‫کد نهایی برای‬
‫ماشین ‪2‬‬ ‫ماشین ‪3‬‬
‫…‬
‫ماشین ‪1‬‬ ‫ماشین ‪K‬‬

‫شکل‪‌:‬نحوه‌کامپایل‌یک‌برنامه‌برای‌اجرا‌روی‌کامپیوترهای‌مختلف‬
‫‪13‬‬
‫ساختار کامپایلر (ادامه)‬
‫➢ به جای این‪ ،‬از یک تکنیک ساده استفاده می‌شود‪ .‬تجزیه کامپایلر به دو‬
‫برنامه مبدا‬
‫بخش جلوبندی و عقب‌بندی‬

‫➢ در این روش یک زبان میانی تولید می‌شود و در هر کامپایلر ابتدا کد به‬


‫جلوبندی‬
‫زبان میانی ترجمه و سپس از زبان میانی به زبان مقصد تبدیل می‌شود‪.‬‬

‫کد میانی‬

‫عقببندی‬

‫برنامه نهایی‬

‫شکل‪‌:‬جلوبندی‌و‌عقب‌بندی‬
‫‪14‬‬
‫ساختار کامپایلر (ادامه)‬
‫برنامه مبدا‬ ‫➢ در این صورت به ‪ N+K‬کامپایلر نیاز است‪.‬‬

‫➢ برای یک زبان جدید تنها یک کامپایلر نیاز‬

‫جلوبندی برای‬ ‫جلوبندی برای‬ ‫جلوبندی برای‬ ‫جلوبندی برای‬


‫است‪.‬‬
‫…‬
‫زبان ‪1‬‬ ‫زبان ‪2‬‬ ‫زبان ‪3‬‬ ‫زبان ‪n‬‬
‫➢ برای یک ماشین جدید تنها یک کامپایلر‬
‫نیاز است‪.‬‬

‫کد میانی‬

‫عقببندی‬ ‫عقببندی‬ ‫عقببندی‬ ‫عقببندی‬


‫برای زبان ‪1‬‬ ‫برای زبان ‪2‬‬
‫…‬ ‫برای زبان ‪k‬‬
‫برای زبان ‪3‬‬

‫برنامه نهایی‬ ‫شکل‪‌:‬استفاده‌از‌زبان‌میانی‌برای‌‬


‫تولید‌کامپایلرهای‌مختلف‬
‫‪15‬‬
‫ساختار داخلی کامپایلر‬

‫➢ همانطور که گفتیم ساختار درونی کامپایلر را میتوان به دو بخش عمده تجزیه کرد‪:‬‬

‫➢ جلوبندی که عملیات تحلیل (‪ )Analysis‬و عقب‌بندی که عملیات ستتز (‪ )Synthesis‬را انجام می‌دهد‪.‬‬

‫‪16‬‬
‫فاز تحلیل‬
‫➢ هدف فاز تحلیل دریافت برنامه ورودی و تجزیه آن به اجزای اصلی و سپس اعمال یک گرامر به آن است‪.‬‬

‫➢ در این بخش خطاهای برنامه شناسایی می‌شوند و پیغام مناسب برای کاربر نمایش داده می‌شود‪.‬‬

‫➢ در این مرحله یک کد میانی تولید می‌شود که توسط مرحله سنتز مورد استفاده قرار می‌گیرد‪.‬‬

‫➢ در این بخش از روی کد منبع یک ساختمان داده به نام ‪ Symbol Table‬ساخته می‌شود که در فاز سنتز از‬
‫آن استفاده می‌شود‪.‬‬

‫‪17‬‬
‫فاز سنتز‬

‫➢ فاز سنتز تولید کد نهایی را برعهده دارد‪.‬‬

‫➢ ورودی فاز سنتز‪ ،‬کد میانی و جدول نمادها است که توسط فاز تحلیل تولید شده است‪.‬‬

‫‪18‬‬
‫ساختار داخلی کامپایلر با جزئیات بیشتر‬
‫➢ تحلیلگر لغوی‬

‫➢ تحلیلگر نحوی‬

‫➢ تحلیلگر معنایی‬

‫➢ تولید کد میانی‬

‫➢ بهینه سازی مستقل از ماشین (اختیاری)‬

‫➢ تولید کد مقصد‬

‫➢ بهینه سازی وابسته به ماشین (اختیاری)‬

‫‪19‬‬
‫تحلیلگر لغوی‬
‫➢ تحلیلگر لغوی متن کد شده به زبان مبدا را به صورت جریانی از کاراکترها دریافت کرده و لغات تشکیل دهنده معنادار‬
‫برنامه را استخراج می‌کند‪ .‬به این لغات ‪ lexeme‬گفته می‌شود‪ .‬برای هر ‪ lexeme‬یک خروجی به صورت زیر تولید‬
‫می‌شود‪:‬‬

‫𝑒𝑢𝑙𝑎𝑣 –𝑒𝑡𝑢𝑏𝑖𝑟𝑡𝑡𝑎 ‪𝑡𝑜𝑘𝑒𝑛– 𝑛𝑎𝑚𝑒,‬‬

‫‪20‬‬
‫تحلیلگر لغوی (ادامه)‬
‫➢ فرض کنید اولین خط برنامه به صورت زیر باشد‪:‬‬

‫‪position = initial + rate ∗ 60‬‬

‫➢ تحلیلگر لغوی کلمه ‪ position‬را به عنوان ‪ lexeme‬از نوع شناسه‪ ،‬شناسایی می‌کند و جفت >‪ <id, 1‬را برای‬
‫آن در نظر می‌گیرد‪ .‬عدد ‪ 1‬نشان دهنده مدخل قرارگیری این شناسه در جدول نشانه است‪.‬‬

‫➢ سپس عالمت = شناسایی می‌شود که نیازی به توصیف‌گر ندارد و به صورت >‘=‘< ذخیره می‌شود‪.‬‬

‫➢ سپس شناسه ‪ ،initial‬عالمت ‪ ،+‬شناسه ‪ rate‬و عالمت * مانند باال شناسایی می‌شوند‪.‬‬

‫➢ در نهایت مقدار ‪ 60‬شناسایی و به صورت >‪ <60‬نمایش می‌یابد‪.‬‬

‫‪21‬‬
‫تحلیلگر لغوی (ادامه)‬
‫➢ در نهایت خروجی تحلیلگر لغوی برای قطعه کد زیر‬

‫‪position = initial + rate ∗ 60‬‬

‫➢ به صورت زیر خواهد بود‪:‬‬

‫‪𝑖𝑑, 1‬‬ ‫=‬ ‫‪𝑖𝑑, 2 +‬‬ ‫∗ ‪𝑖𝑑, 3‬‬ ‫‪60‬‬

‫➢ بدیهی است کشف خطاهای در سطح تعریف لغات در این مرحله انجام می‌شود‪.‬‬

‫;‪Temp#:=10‬‬
‫;‪t ≔ 123.423.34‬‬
‫;‪str ≔ ′𝑎𝑙𝑖′‬‬

‫‪22‬‬
‫تحلیلگر نحوی‬
‫➢ فاز دوم کامپایلر تحلیلگر نحوی یا پارسر است‪.‬‬
‫➢ وظیفه تحلیلگر نحوی بررسی درستی جایگاه هر یک از ‪ lexeme‬هاست‪.‬‬
‫➢ فرض کنید جمله ‪ I School goo to‬برای ترجمه داده شده باشد‪ .‬در این صورت تحلیلگر لغوی کلمه ‪ goo‬را به‬
‫عنوان یک اشتباه و خطا در نظر می‌گیرد‪.‬‬
‫➢ فرض کنید عبارت ‪ I School go to‬داده شده‪ ،‬در این حالت تحلیلگر لغوی هیچ خطایی را شناسایی نمی‌کند‬
‫ولی تحلیلگر نحوی متوجه عدم تبعیت این جمله از گرامر انگلیسی می‌شود و خطا تولید می‌کند چرا که این جمله‬
‫از ساختار جمله خبری در انگلیسی تبعیت نمی‌کند‪.‬‬
‫‪1–A≔>B‬‬
‫;≔‪2–A B‬‬
‫‪3–if (a=b then‬‬
‫;‪4–program a‬‬
‫‪begin‬‬
‫;)’‪writeln(‘hello‬‬
‫‪ed‬‬
‫‪23‬‬
‫تحلیلگر نحوی (ادامه)‬
‫➢ تحلیلگر نحوی خروجی تحلیلگر لغوی را گرفته و در‬
‫‪position = initial + rate ∗ 60‬‬
‫صورتی که ترتیب ‪ lexeme‬ها صحیح باشد‪ ،‬از آن یک‬
‫ساختار درختی تولید می‌کند که به آن درخت تجزیه‬
‫‪Lexical Analyzer‬‬
‫(درخت گرامر یا درخت نحو) گفته می‌شود‪.‬‬

‫‪𝑖𝑑, 1‬‬ ‫=‬ ‫‪𝑖𝑑, 2‬‬ ‫‪+‬‬ ‫‪𝑖𝑑, 3‬‬ ‫∗‬ ‫‪60‬‬

‫‪Syntax Analyzer‬‬

‫=‬

‫‪𝑖𝑑, 1‬‬ ‫‪+‬‬

‫‪𝑖𝑑, 2‬‬ ‫∗‬

‫‪𝑖𝑑, 3‬‬ ‫‪60‬‬


‫‪24‬‬
‫تحلیلگر معنایی‬
‫➢ برای فهم بهتر این بخش از همان مثال ترجمه انگلیسی استفاده می‌کنیم‪.‬‬
‫➢ جمله ‪ I eat school‬از نظر تحلیلگر لغوی و تحلیل‌گر نحوی هیچ خطایی تولید نمی‌کند چرا که هیچ کلمه‬
‫ناشناخته‌ای در متن وجود ندارد و عالوه بر این از ساختار فاعل‪ ،‬فعل و مفعول تبعیت می‌کند‪.‬‬
‫➢ با این حال این جمله از نظر معنایی دارای اشکال است‪ .‬چنین اشکاالتی را در برنامه کامپیوتری‪ ،‬فاز تحلیل معنایی‬
‫آشکار می‌کند‪.‬‬

‫‪25‬‬
‫تحلیلگر معنایی (ادامه)‬
‫➢ بررسی و هماهنگی پارامترها‬
‫{ )𝑏 𝑡𝑛𝑖 ‪𝑖𝑛𝑡 𝑠𝑢𝑚 (𝑖𝑛𝑡 𝑎 ,‬‬
‫;𝑏 ‪𝑟𝑒𝑡𝑢𝑟𝑛 𝑎 +‬‬
‫}‬
‫{ )( 𝑛𝑖𝑎𝑚 𝑡𝑛𝑖‬
‫;‪𝑖𝑛𝑡 𝑏 = 12, 𝑐 = 13‬‬
‫;‪𝑓𝑙𝑜𝑎𝑡 𝑖 = 34.0‬‬
‫;)𝑐 ‪𝑏 = 𝑠𝑢𝑚(𝑖, 𝑏,‬‬
‫;‪𝑟𝑒𝑡𝑢𝑟𝑛 0‬‬
‫}‬

‫‪26‬‬
‫تحلیلگر معنایی (ادامه)‬
‫➢ بررسی و کنترل نوع )‪(Type Checking‬‬
‫;𝑙𝑎𝑒𝑟 ‪𝑣𝑎𝑟 𝑓:‬‬
‫;𝑟𝑒𝑔𝑒𝑡𝑛𝑖 𝑓𝑜 ‪𝑎: 𝑎𝑟𝑟𝑎𝑦 1. . 10‬‬
‫𝑛𝑖𝑔𝑒𝑏‬
‫;‪𝑓 ≔ 2.3‬‬
‫;‪𝑎 𝑓 ≔ 12‬‬
‫𝑑𝑛𝑒‬

‫‪27‬‬
‫تحلیلگر معنایی (ادامه)‬
‫➢ تبدیل نوع و تعریف مجدد متغیر‬

‫;‪𝑖𝑛𝑡 𝑎 = 10‬‬
‫;‪𝑓𝑙𝑜𝑎𝑡 𝑏 = 12.3‬‬
‫;𝑐 𝑡𝑎𝑜𝑙𝑓‬
‫;𝑏 ‪𝑐 = 𝑎 +‬‬

‫‪28‬‬
‫تحلیلگر معنایی (ادامه)‬

‫‪Syntax Analyzer‬‬ ‫➢ خروجی تحلیلگر معنایی‬

‫=‬
‫‪𝑖𝑑, 1‬‬ ‫‪+‬‬
‫‪𝑖𝑑, 2‬‬ ‫∗‬
‫‪𝑖𝑑, 3‬‬ ‫‪60‬‬

‫‪Semantic Analyzer‬‬

‫=‬
‫‪𝑖𝑑, 1‬‬ ‫‪+‬‬
‫‪𝑖𝑑, 2‬‬ ‫∗‬
‫‪𝑖𝑑, 3‬‬ ‫𝑡𝑎𝑜𝑙𝑓 𝑜𝑡 𝑡𝑛𝑖‬

‫‪60‬‬
‫‪29‬‬
‫تولید کد میانی‬
‫➢ پس از بررسی در مراحل تحلیل لغوی‪ ،‬نحوی و معنایی تولید کد میانی آغاز می‌شود‪.‬‬
‫➢ کد میانی زبان یک ماشین مجازی است و هر کامپایلر می‌تواند زبان میانی خاص خود را داشته باشد‪ .‬با‬
‫این حال این کد باید خواص زیر را داشته باشد‪:‬‬
‫▪ سهولت تولید کد زبان میانی‬
‫▪ سهولت ترجمه به زبان مقصد‬

‫➢ یکی از انواع زبان‌های منطقی‪ ،‬کد سه آدرسته است که در آن تمامی دستورات حاوی عملگر انتساب (=)‬
‫هستند‪.‬‬
‫➢ به جز عملگر انتساب حداکثر یک عملگر دیگر مجاز است‪.‬‬

‫‪30‬‬
)‫تولید کد میانی (ادامه‬
‫➢ مثال‬
=
𝑖𝑑, 1 +
𝑖𝑑, 2 ∗
𝑖𝑑, 3 𝑖𝑛𝑡 𝑡𝑜 𝑓𝑙𝑜𝑎𝑡

60

Intermediate Code Generator

𝑡1 = 𝑖𝑛𝑡𝑡𝑜𝑓𝑙𝑜𝑎𝑡(60)
t2 = 𝑖𝑑3 ∗ 𝑡1
t3 = 𝑖𝑑2 + 𝑡2
id1 = 𝑡3
31
‫بهینه سازی کد میانی‬
‫➢ بهینه سازی از نظر کاهش فضای ذخیره سازی یا افزایش سرعت‬
‫‪Intermediate Code Generator‬‬

‫)‪𝑡1 = 𝑖𝑛𝑡𝑡𝑜𝑓𝑙𝑜𝑎𝑡(60‬‬
‫‪t2 = 𝑖𝑑3 ∗ 𝑡1‬‬
‫‪t3 = 𝑖𝑑2 + 𝑡2‬‬
‫‪id1 = t3‬‬

‫‪Code Optimizer‬‬

‫‪𝑡1 = 𝑖𝑑3 ∗ 60.0‬‬


‫‪id1 = 𝑖𝑑2 + 𝑡1‬‬

‫‪32‬‬
‫تولید کننده کد‬
‫➢ این فاز کد بهینه شده را به کد اسمبلی ترجمه می‌کند‬
‫‪𝑡1 = 𝑖𝑑3 ∗ 60.0‬‬
‫‪id1 = 𝑖𝑑2 + 𝑡1‬‬

‫‪Code Generator‬‬

‫‪𝐿𝐷𝐹 𝑅2, 𝑖𝑑3‬‬


‫‪𝑀𝑈𝐿𝐹 𝑅2, 𝑅2, #60.0‬‬
‫‪𝐿𝐷𝐹 𝑅1, 𝑖𝑑2‬‬
‫‪𝐴𝐷𝐷𝐹 𝑅1, 𝑅1, 𝑅2‬‬
‫‪𝑆𝑇𝐹 𝑖𝑑1, 𝑅1‬‬

‫‪33‬‬
‫جدول نماد و اداره کننده خطا‬
‫➢ جدول نماد یکی از اجزایی است که در تمامی فازهای کامپایلر مورد استفاده قرار می‌گیرد‪.‬‬
‫➢ برخی فازها ممکن است جدول نماد را بروزرسانی و برخی دیگر ممکن است از آن برای پردازش خود استفاده‬
‫کنند‪.‬‬
‫➢ بخش اداره کننده خطا نیز با تمامی بخش‌ها در ارتباط است‪ .‬این بخش مدیریت خطاهای تولید شده در‬
‫فازهای مختلف را به عهده دارد‪.‬‬

‫‪34‬‬
‫ویژگیهای یک کامپایلر خوب‬
‫➢ تولید کد صحیح‬
‫➢ پیروی از مشخصات زبان مبدا (شناسایی همه ساختارهای نحوی و لغوی)‬
‫➢ امکان پردازش برنامه‌های بزرگ‬
‫➢ سرعت کامپایلر (ارتباط مستقیم با زمان تولید نرم افزار)‬
‫➢ اندازه کامپایلر (کاهش هزینه ذخیره سازی موجب کاهش اهمیت این مورد شده)‬
‫➢ مدیریت خطا و گزارش صحیح خطا (علت خطا‪ ،‬فایل حاوی خطا‪ ،‬شماره خط‪ ،‬توصیه‌ای برای رفع خطا)‬
‫➢ بهینه سازی‬
‫➢ قابلیت حمل (قابلیت حمل خود کامپایلر‪ ،‬قابلیت حمل کد تولید شده)‬

‫‪35‬‬
‫پرسش و پاسخ‬

‫‪36‬‬

You might also like