بخشی از پاورپوینت
اسلاید 1 :
بسم الله الرحمن الرحیم
اسلاید 2 :
فصل هشتم
طراحی و پیاده سازی زبان های برنامه نویسی
کنترل ترتیب اجرا
اسلاید 3 :
فهرست مطالب
1-مقدمه
2- کنترل ترتیب ضمنی و صریح
3-ترتیب اجرا در عبارات محاسباتی
نمایش درختی عبارات
نمایش زمان اجرا
3- کنترل ترتیب بین دستورات
دستورات اصلی
کنترل ترتیب ساخت یافته
برنامه های بنیاد
4-ترتیب در عبارات غیر محاسباتی
تطابق الگو
اتحاد
عقبگرد
اصل راه حل
اسلاید 4 :
مقدمه
ساختارهای کنترلی در زبان برنامه نویسی، چارچوبی اند که عملیات و داده ها را در برنامه ها و مجموعه ای از برنامه ها را با هم ترکیب میکند.
این کار دو جنبه دارد:
کنترل ترتیب اجرای عملیات است که آن را که کنترل ترتیب می نامند و در این فصل بررسی می شود.
کنترل انتقال داده ها بین زیربرنامه ها و برنامه ها است که آن را کنترل داده ها می نامند (در دو فصل بعد بررسی می شود).
اسلاید 5 :
کنترل ترتیب ضمنی و صریح
ساختارهای کنترل ترتیب به چهار دسته تقسیم می شوند:
ساختارهایی که در عبارات مورد استفاده قرار می گیرند، مثل قاعده تقدم عملگرها و پرانتزها.
ساختارهایی که بین دستورات یا گروهی از دستورات به کار می روند، مثل دستورات شرطی و تکراری.
برنامه نویسی اعلانی، یک مدل اجرایی است که به دستورات بسنگی ندارد، اما موجب پیشروی کنترل اجرا در برنامه می شود. برنامه نویسی منطقی در پرولوگ نمونه ای از آن است.
کنترل ترتیب در زیر برنامه ها، مثل فراخوانی زیربرنامه ها و همروالها که مو جب انتقال کنترل از نقطه ای به نقطه ی دیگری از برنامه می شود.
زبانهایی مثل لیسپ و APL فاقد کنترل ترتیب دستورات هستند.
اسلاید 6 :
کنترل ترتیب ضمنی و صریح (ادامه)
ساختارهای کنترل ترتیب ممکن است ضمنی یا صریح باشند:
ساختار های کنترل ضمنی ، اجراي دستورات به صورت پيش فرض توسط زبان برنامه نويسي مشخص مي شود. به عنوان مثال ترتیب اجرای عملیات ها در یک عبارت بدون پرانتز
ساختار کنترل ترتیب صریح، توسط برنامه نویس تعریف می شود.به عنوان مثال وارد کردن پرانتز در عبارات ریاضی و استفاده از goto
اسلاید 7 :
ترتیب اجرا در عبارات محاسباتی
اسلاید 8 :
نمایش درختی عبارات
با در نظر گرفتن عملیات در عبارات آرگومانهای عملیات را عملوند می نامیم.
مکانیزم کنترل ترتیب در عبارات ترکیب تابعی است یعنی عملیات و عملوندهایش مشخص می شود.
ترکیب تابعی ساختار درختی را به عبارات اِعمال می کند.
نمایش رختی ساختار کنترلی عبارات را نشان می دهد . نتایج ارجاع به داده ها یا عملیات در در سطوح پایین تر درخت، به عنوان عملوند های عملیات سطوح بالاتر محسوب می شود.
اسلاید 9 :
SQRT
اسلاید 10 :
ترتیب اجرا در عبارات محاسباتی(ادامه)
نحو عبارات
اگر عبارات به صورت درختی نمایش داده شوند، در برنامه ها باید عبارات را به صورت یک دنباله ی خطی مشخص کرد:
نشانه گذاری prefix
نشانه گذاری postfix
نشانه گذاری infix
اسلاید 11 :
نمایش درختی عبارات -نحو عبارات
نشانه گذاری prefix :
در این نوع نشانه گذاری داریم:
ابتدا نماد عملیات نوشته می شود. و سپس عملوندها به ترتیب از چپ به راست نوشته خواهند شد.
اگرعملوند ی خودش یک عملیات باشد که این عملیات دارای عملوند های دیگری باشد، این قاعده تکرار می شود.
در این نوع نشانه گذاری پرانتز وجود ندارد، که آن را عبارات polish نیز می نامند.
اسلاید 12 :
مثال
برای درخت زیر میخاهیم عبارات polish و Cambridge polish را به دست بیاوریم.
Polish: ×+ab-ca
Cambridge polish: (×(+ab)(-ca))
اسلاید 13 :
نشانه گذاری postfix
همانند نشانه گزاری prefix است با این تفاوت که عملگرها بعد از عملوندها می آیند.
* مثال
برای مثال قبل نشانه گذاری postfix آن را به دست بیاورد؟
ab+ca-×
نشانه گذاری infix
برای عملیات دودویی بسیار مناسب است.
در این نوع نشانه گذاری عملگر بین عملوندها نوشته می شود.
در این نوع نشانه گذاری از پرانتز هم استفاده می شود.
برای عملیات محاسبه ای و منطقی و رابطه ای در ریاضیات به کار می رود.
برای عملگرهایی که بیش از دو عملوند دارند مناسب نیست.
نمایش درختی عبارات-نحو عبارات
اسلاید 14 :
ارزیابی عبارات
ارزیابی عبارات prefix:
با یک بار پیمایش عبارات می توانیم آن را ارزیابی کنیم. باید تعداد آرگومانهای هرعملیات را بدانیم، به همین دلیل نمادهای منحصر به فردی برای عملگرها در نظر گرفته می شود.
این نوع نشانه گذاری علاوه بر صرفه جویی در پرانتز، ارزشهای خاصی در زبان های برنامه سازی دارند، که می توان موارد زیر را نام برد:
فراخوانی تابع به صورت نشانه گذاری prefix انجام می شود.
برای نمایش عملیاتی با هر تعدادی از عملوندها به کار گرفته می شود. بنابراین یک شیوه ی کلی است.
نشانه گذاری prefix را به راحتی می توان رمز گشایی کرد و به همین دلیل، ترجمه ی عبارات prefix به دنباله ای از کدهای ساده، انجام پذیر است.
اسلاید 15 :
الگوریتم رمز گشایی prefix
رمزگشایی نشانه گذاری prefix:
برای اینکار مراحل زیر را باید انجام دهیم(فرض کنید p یک عبارت prefix هست).
اگر قلم بعدی در p یک عملگر است، آن را به بالای پشته اضاف کنید.
اگر قلم بعدی p یک عملوند باشد آن را در بالای پشته قرار دهید.
اگر عملوندهای مورد نیاز یک عملگر در بالای پشته قرار داشت، می توان عملگر را بر روی این عملوندها عمل کنیم.
اسلاید 16 :
الگوریتم رمز گشایی postfix
ارزیابی عبارات postfix:
مراحل الگوریتم postfix به صورت زیر است:
اگر قلم بعدی در p یک عملوند باشد، آن را در بالای پشته قرار دهید.
اگر قلم بعدی در p یک عملگر n تایی است، و n آرگومان آن در بالای پشتته قرار دارد، به جای این n قلم، نتیجه ی اجرای عملگر بر روی آنها در پشته قرار دهید.
اسلاید 17 :
ارزیابی عبارات infix
ارزیابی عبارات infix:
گرچه نشانه گذاری infix متداول است، استفاده از آن در زبان برنامه سازی مشکلاتی را به وجود می آورد:
چون نشانه گذاری infix فقط برای عملگرهای دودویی مناسب است، زبان نمی تواند تنها از این نشانه گذاری استفاده کند.بلکه باید نشانه گذاری infix را با postfix یا prefix ترکیب کند. این ترکیب ترجمه را دشوار میکند.
وقتی بیش از یک عملگر infix در عبارتی ظاهر شود، این نشانه گذاری مبهم است، مگر اینکه از پرانتز استفاده گردد.
اسلاید 18 :
مثال
عبارت روبه رو که به صورت infix هست رادر نظر بگیرید: 2*3+4
(2*3)+4=10
2*(3+4)=14
اسلاید 19 :
قواعد ضمنی برای کاهش پرانتز
سلسله مراتب عملگرها(قواعد تقدم عملگرها):
عملگرهایی که در عبارات ظاهر می شوند، به ترتیب سلسله مراتبی یا تقدم قرار می گیرند.
در عبارتی که شامل عملگرهایی از چند سطح سلسله مراتب باشد، قاعده ی ضمنی این است که عملگرهایی با تقدم بالاتر زودتر اجرا شود.
سلسله مراتب در ادا
اسلاید 20 :
شرکت پذیری:
در عباراتی که شامل عملیاتی در یک سلسله مراتب هستند، قاعده ی ضمنی دیگری لازم است تا ترتیب عملیات را کاملا مشخص کند.
شرکت پذیری چپ به راست متداولترین قاعده ی ضمنی است
تقدم عملگرها برای عبارات محاسباتی به خوبی عمل می کند. زیرا اغلب برنامه نویسان مدل مربوط به معنای عبارات را می شناسند.
اگر زبان حاوی عملگرهایی باشد، که در ریاضیات کلاسیک موجود نباشند، تقدم ها با شکست مواجه می شوند.
قواعد ضمنی برای کاهش پرانتز