Payamvdn/NorthPersian_fa_wiki huggingface dataset:
در علوم کامپیوتر گسترش در خط به معنی جایگزینی دستور فراخوانی یک تابع با متن خود آن تابع است. این کار به صورت دستی توسط برنامه نویس (به طور مثال به وسیله کلیدواژه های تعریف شده زبان) یا به صورت خودکار (توسط کامپایلر) انجام می شود. این عمل بسیار شبیه به گسترش ماکرو است، ولی تفاوت عمدهای که گسترش در خط دارد این است که در زمان کامپایل انجام می شود ولی جایگزینی ماکروها در زمان پیش از کامپایل صورت می گیرد و متن برنامه ورودی تحلیل گر کامپایلر تغییر پیدا می کند. مزیت گسترش در خط نسبت به ماکرو این است که ایرادهای ماکرو را از قبیل احتمال رعایت نشدن اولویت عملیات ریاضی ندارد. گسترش در خط تأثیر زیادی بر عملکرد کامپایلر دارد و یکی از بهینه سازی های ساده در کامپایلرها است که می تواند منجر به افزایش سرعت شود. البته گسترش در خط بیش از حد به دلیل اشغال کردن قسمت عمده ای حافظه نهان دستورها ممکن است باعث کندتر شدن برنامه گردد. بررسی عملکرد گسترش در خط در مقاله های دهه ۸۰ تا ۹۰ میلادی در سال ۱۹۹۹ توسط Jones و Marlow انجام شده است بررسی کلی. همان طور که گفته شد گسترش در خط از گسترش ماکرو سریع تر است و دلیل آن این است که در گسترش
در خط سر بار فراخوانی تابع (که شامل ذخیره سازی مقادیر ثبّات ها و پرش است) دیگر وجود ندارد و خطوط مربوط به متن تابع مستقیماً اجرا می شود. از جهت دیگر اما گسترش در خط می تواند باعث هدر رفتن حافظه شود زیرا به ازای هر محل از برنامه که تابع فراخوانی شده باشد، یک رونوشت از متن تابع در آن جا اضافه می گردد. در نتیجه استفاده از گسترش در خط معمولاً در حالتی که متن تابع کوتاه است می تواند کارساز باشد. به طور مثال در زبان ++C، توابعی که عضو کلاس ها هستند در صورتی که در داخل تعریف کلاس تعریف شوند به طور پیش فرض در خط سازی می شوند. در غیر این صورت برنامه نویس می بایستی صراحتاً از کلیدواژه inline استفاده کند. همچنین دلیل اشاره شده بالا، کامپایلر این زبان، توابع بزرگی که برنامه نویس صراحتاً درخواست خطی سازی آن ها را کرده است، خطی سازی نمی کند. همچنین در برنامه نویسی تابعی، گسترش در خط معمولاً پس از تبدیل کاهش بتا صورت می گیرد. تأثیر آن بر روی عملکرد برنامه. گسترش در خط سر بار فراخوانی تابع را کاهش می دهد ولی دلیل اصلی انجام آن زمینه سازی برای بهینه سازی های دیگر است زیرا گسترش در خط اندازه برنامه را زیاد می کند و بهینه سازی
های بهتری بر روی برنامه های با اندازه بزرگتر قابل انجام است پیش بینی اثر نهایی گسترش در خط بر روی عملکرد برنامه پیچیده است و به دلیل اثر آن بر روی حافظه نهان دستورها، بسته به برنامه و اندازه حافظه نهان متفاوت است همچنین میزان این تأثیر بین زبان های مختلف متفاوت است. به طور مثال در زبان های سطح پایین مانند C و Fortran، به اندازه ۱۰–۲۰٪ افزایش سرعت مشاهده می شود، در حالی که در زبان های سطح بالاتر و انتزاعی تر گسترش در خط می تواند چندین مرحله از اجرای برنامه را حذف کند. مثال این گونه زبان ها، زبان سلف (زبان_برنامه نویسی) است که ضریب بهبودی بین ۴ تا ۵۵ داشته است پشتیبانی کامپایلرها. کامپایلرها از روش های مختلفی برای تشخیص اینکه چه تابعی را گسترش در خط دهند، استفاده می کنند. این روش ها عبارتند از: گسترش در خط در بسیاری از زبان ها به صورت خودکار توسط کامپایلر صورت می گیرد و کامپایلر بررسی می کند که آیا این عمل برای سرعت برنامه مفید است یا خیر. همچنین کلیدواژه هایی مانند inline نیز در برخی از زبان ها به عنوان پیشنهادی از طرف برنامه نویس برای در خطی سازی تابع وجود دارد. هرچند که همان طور که گفته شد این کلیدواژه ها کا
مپایلر را مجبور به انجام این عمل نمی کند. به طور کلی توسعه دهندگان کامپایلرها از الگوریتم جستجوی کاشف و روش های مکاشفه ای در طراحی کامپایلر استفاده می کنند تا تشخیص دهند که در چه جایی نیاز به گسترش در خط می باشد. پیاده سازی. پس از تشخیص اینکه کدام توابع باید گسترش در خط داده شوند، انجام این عمل معمولاً ساده است. کامپایلر می تواند که این عمل را در یک نمایش میانی سطح بالا مانند درخت نحو انتزاعی انجام دهد یا اینکه گسترش در خط در سطح پایین صورت گیرد. در هر دو حالت کامپایلر ورودی های تابع را حساب می کند، آن ها را در متغیرهایی قرار می دهد و در نهایت متن تابع را با محل فراخوانی آن تابع، جایگزین می کند. پیوند دهندهها نیز می توانند گسترش در خط انجام دهند. پیونددهنده ها توابعی را که از کتابخانه های دیگر استفاده شده و در متن برنامه اولیه موجود نبوده را گسترش در خط می دهند. در مثال زیر یک گسترش در خط به صورت دستی انجام شده است: int pred(int x) { if (x == 0) return 0; else return x - 1; "قبل از در خط سازی:" int f(int y) { return pred(y) + pred(0) + pred(y+1); "بعد از آن:" int f(int y) { int temp; if (y == 0) temp = 0; els
e temp = y - 1; /* (1) */ if (0 == 0) temp += 0; else temp += 0 - 1; /* (2) */ if (y+1 == 0) temp += 0; else temp += (y + 1) - 1; /* (3) */ return temp; مقایسه با ماکرو. پیش از C99 در زبان سی در خط سازی به کمک ماکروها انجام می شد. مزایای گسترش در خط نسبت به ماکروها عبارتند از: بی یارنه استراس تروپ خالق زبان سی پلاس پلاس نیز استفاده از توابع در خط را به جای ماکروها توصیه می کند.
یک درخت رونده اتوماتا یک نوع اتوماتا متناهی است که به جای رشته ها درخت ها را تحلیل می کند. این مفهوم توسط Aho و Ullman پیشنهاد شده است. این درخت بسیار شبیه درخت گرامر درخت منظم و ماشین درختی به عبارتی می توان گفت این درخت نمایشی متفاوت از دو درخت یاد شده است. تعریف. تمام درخت های به این شکل دودویی هستند و دارای برچسب هایی با الفبای ثابت هستند در واقعیت این درخت ها دارای تعدادی حالت هستند که با آمدن حروف جدید مانند اتومات های واقعی از حالتی به حالت دیگر حرکت می کند و در نهایت اگر در حالت تأیید به کار خود پایان داد که آن درخت تأیید می شود و اگر در حالت رد یا حلقهٔ بی نهایت به کار خود پایان داد آن درخت رد می شود. اگر بخواهیم به صورت ریاضی تر آن را بگوییم هر درخت غیر قطعی رونده اتوماتا یک شش تایی A = (Q, Σ, I, F, R, δ) است که Σ الفبایی ثابت بوده، Q مجموعهٔ حالت ها ،I حالت های شروع، F حالت های تأیید و R حالت های رد است. همان طور که در تمامی اتومات ها رابطه هایی وجود دارد که با دیدن یک حرف از حالی به حالت دیگر می رود. δ ⊆ (Q × { root, left, right, leaf } × Σ × { up, left, right } × Q) Q اول به معنای حالت فعلی است ک
ه در حالت فعلی یکی از چهار حالت مشخص شده را داریم. منظور از Σ حرف دیده شده است و مورد بعدی به معنای حرکتی است که می کنیم که یکی از بالا، راست و چب است و Q آخر نیز به معنای حالتی است که در آن می رویم. پس رابطه های به صورت ۵ تایی هایی درین اتوماتا نمایان می شوند. مثال. یک مثال ساده از این درخت برای اجرا کردن الگوریتم جستجوی عمق اول بر روی درخت ورودی است. طبعاً برای هر مثال باید پارامترهای تعریف را مشخص کنیم. این اتومات های ۳ حالت دارد، formula_1. در ابتدا از ریشه که حالت ۰ است شروع می کنیم. حال با آمدن هر راس جدید به حالت چپ وارد می شویم و در صورتی که در برگ درخت باشیم به بالا می رویم که متناظر با همان حرکت بالا بود که در تعریف از آن یاد کرده بودیم. همان طور که گفتیم درین درخت می توان مشخص کرد که آیا زیر درختی پردازش شده است یا نه در این جا هم هر جا که زیر درخت سمت چپ پردازش شده باشد باید به حالت سمت راست برویم.formula_2 خواص. بر خلاف ماشین درختی، درخت رونده اتوماتا به سختی قابل تجزیه و تحلیل است و حتی خواص سادهٔ آن نیز به سختی اثبات می شود و بعضاً اثبات های بسیار پیچیده و غیر بدیهی دارند. درین به برخی از خواص
آن که اثبات شده است اشاره می کنیم
منطق جدایی تعمیمی از منطق هور (Hoare logic) است که هدف اصلی ابداع آن، بررسی و وارسی ریاضی برنامه هایی است که داده ها را در حافظه تغییر می دهند و خانه های مختلف از حافظه هستند که در معرض تحول هستند. این منطق توسط جان سی رینولدز, Peter O'Hearn, Samin Ishtiaq و Hongseok Yang معرفی شده است. مفاهیم کلی. در برنامه هایی که از اشاره گر بهره می برند، استفاده از منطق های پیشین نظیر منطق هور ممکن نیست. علت آن است که در این جا، هر خانه از حافظه اهمیت دارد و باید زبان منطق مورد نظر، توانایی اشاره به قسمت های مختلف از حافظهٔ رایانه را داشته باشد. به این دلیل، نیاز به تعریف عملگری جدید حس شد. این احساس نیاز، منجر به تعریف عملگر formula_1 شد که به صورت شهودی یعنی دو عملوند آن، در قسمت های مجزا از حافظهٔ پشته هستند؛ لذا، با شکل گیری این منطق و ابزارهای آن، وارسی الگوریتم ها و برنامه های موازی امکان پذیر شده است. اعلان ها. منظور ما در این جا از حالت، وضعیت مقادیر موجود در حافظهٔ تصادفی و همچنین حافظهٔ پشته است. اعلان formula_2 در منطق جدایی، تعدادی حالت را مشخص می کند که در آن ها formula_2 درست است. با تعریف استقرایی ساختار لغ
وی منطق جدایی، عبارت formula_4 حالاتی را مشخص می کند که formula_2 در یک قسمت از ساختار حافظهٔ تصادفی/پشته و formula_6 در قسمتی کاملاً مجزا از آن درست باشد. پس تعریف استقرایی زبان منطق به این صورت است: حال می توان این عملگرها را در مفاهیم منطق مرتبهٔ اول به کار برد و با آن عباراتی در مورد تأثیر یک برنامه بر حافظه گفت یا در بیان مشخصات حافظه استفاده کرد. استدلال و استنتاج. در این منطق هم مانند دیگر منطق ها می توان اصول استنتاج تعریف و طبق آن ها استدلال کرد. برای مثال طبق تعریف عملگر formula_10، داریم: formula_12 تمامی قواعد استنتاج در منطق هور، در منطق جدایی هم معتبر هستند؛ و همچنین در این منطق، قاعدهٔ قاب هست که برای سه تایی های هور تعریف می شود. یک سه تایی هور، به شکل کلی formula_13 است که یعنی اگر، حافظه قبل از اجرای برنامهٔ formula_14، در حالت formula_2 باشد، پس از اجرای آن به حالت formula_6 می رود. حال طبق قاعدهٔ قاب داریم: formula_17 به وسیلهٔ این قاعده، می توان استدلالات محلی در مورد حافظه را گسترش داد و در مورد بخش بزرگ تری از حافظه صحبت کرد. استدلال محلی برای یک برنامهٔ formula_14، یعنی استدلال در مورد
تمامی متغیرها و خانه های حافظه که توسط formula_14 تغییر می یابند. این ها را O'Hearn، ردپای formula_14 می نامد. او بیان می دارد که: «برای فهم رفتار یک برنامه، باید در مورد خانه هایی اطلاع کسب کنید که توسط آن برنامه تغییر می یابند. ارزش دیگر خانه ها به صورت خودبه خود ثابت باقی می ماند.» ابزارهای وارسی مدلّ ها و تحلیل برنامه ها. منطق جدایی به دلیل کاربرد در درستی یابی برنامه های کامپیوتری، عملکرد وسیعی در ابزارهای مختلف وارسی مدل ها و همچنین کاربردهای صنعتی دارد. به نحوی که O'Hearn که از مبدعین این منطق بوده، از سال ۲۰۱۳ در شرکت فیسبوک مشغول به کار است. به صورت کلی، ابزارهایی که از منطق جدایی استفاده می کنند در دسته های مختلف هستند:
چرخان تاژک داران یا داینوفلاژله ها نام یک شاخه از حبابچه داران است که تک یاخته و اکثراً دریازی هستند. این جانوران پلانکتونی اند و در آن ها کپسول مشخصی از جنس سلولز وجود دارد. کپسول دو قسمتی است و شیاری در آن وجود دارد که در برگیرنده دو تاژک است، یکی از تاژک ها رو به عقب امتداد دارد و دیگری تقریباً افقی است. معمولاً دارای لکه چشمی و تعدادی زیاد کلروپلاست قهوه ای، زرد یا مایل به سبز هستند. هسته درشت و یکی است. حضور تعدادی کیسه بزرگ که توسط کانال ها یا مجاری به بیرون راه دارند، از مشخصات این جانوران است. این حجم های غیرانقباضی که پوسول (pusule) نام گرفته اند، گرچه به سیستم کریچهای شباهت ندارند ولی احتمالاً درگرفتن آب و در عمل هیدرواستاتیک نقش ایفا می کنند. دسته ای از چرخان تاژک داران بدون رنگیزه هستند و به طریق جانوران تغذیه می کنند. از نظر ریخت شناسی شبه آمیب ها هستند. تولید مثل در چرخان تاژک داران تا حدودی شبیه تقسیم دوتایی طولی تاژکداران است و در امتداد یک صفحه مورب صورت می گیرد. این نوع تقسیم حتی در کیست نیز اتفاق می افتد. حتی در حالت کیستی تقسیم می تواند از نوع چندتایی باشد. افراد حاصل از تقسیمات متوالی دوت
ایی گاهی به طور موقت به هم چسبیده می مانند (مانند زنجیر). شواهد کافی از ممزوج شدن گامت ها یا یاخته های جنسی وجود ندارد. یک نمونه معروف از تاژک داران چرخان، سراتیوم (Ceratium) است که نمونه ای زره دار و دارای خار و دو تاژک است و به روش گیاهان تغذیه می کند. زره یا تک (Theca)، ضخیم و غیرقابل انعطاف است. خارها از امتداد بخش هایی از صفحات سازنده زره ایجاد شده اند و راست یا خمیده اند. خار جلویی، خار راسی (Apical spine) و خار یا خارهای عقبی (تا ۴ خار عقبی می تواند وجود داشته باشد)، خار یا خارهای مقابل راسی (Anapical spine) نامیده می شوند. طبق معمول بین صفحات سازنده زره دو شیار وجود دارد. شیار در موقعیت استوایی یا افقی به نام حلقه یا انولوس (Annulus) نیز نامیده می شود که معمولاً با یک صفحه به نام سینگولوم (Cingulum) پوشیده شده است. از میان منافذ زره برجستگی ها یا پاپیلاهای سیتوپلاسمی متعددی خارج و به شبکه ای از پاهای کاذب منتهی می شوند. این پاها سبب صید جانداران ریز می شوند، تغذیه گاهی از این نوع است. انواع آب شیرین دارای کلروپلاست های سبز و انواع دریایی زرد یا قهوه ای هستند. نمونه دیگر نوکتیلوکا (Noctiluca)است که همچ
ون یک کره بزرگ (ژلاتینی) به قطر 1mm یا بیشتر است. شناور بر سطح دریا و معمولاً نزدیک ساحل یافت می شود. بی رنگ و بیگانه خوار است. یک تاژک کوتاه ضخیم و یک تاژک ظریف دارد. این موجود دارای خاصیت زیست تابی و مسئول فسفرسانس آب های ساحلی دریاها است.
در بازی زندگی کانوی (و اتوماتای سلولی مربوط) سرعت نور یک نرخ انتشار در سراسر شبکه از دقیقاً یک گام (به صورت افقی عمودی یا مورب) در هر نسل است. در یک نسل یک سلول تنها می تواند همسایه های نزدیکش را تحت تأثیر قرار دهد و بنابراین سرعت نور (در قیاس با سرعت نور در فیزیک) حداکثر نرخی که با آن اطلاعات می توانند منتشر شوند. از این رو یک حد بالا برای سرعتی که با آن هر الگوی حرکت می کند داریم. نماد. همان طور که در فیزیک سرعت نور با حرف &lt;math/&gt;. این در عوض مرجعی است برای توصیف میانگین سرعت انتشار هر سفینه فضایی. برای مثال یک گلایدر گفته می شود که سرعتی برابر &lt;math/&gt;توسط یک سلول ترجمه شود. به طور مشابه «سفینه فضایی سبک» گفته شده است که سرعتی برابر &lt;math/&gt;هر حالت داده شده ۴ نسل طول می کشد تا توسط دو سلول ترجمه شود. انتشار با سرعت نور. در حالی که &lt;math/&gt; یک کران بالای مطلق برای سرعت انتشار است حداکثر سرعت یک سفینه فضایی در بازی زندگی کانوی در واقع &lt;math/&gt;. دلیل این امر آن است که ساخت یک سفینه فضایی که بتواند در هر نسل حرکت کند غیرممکن است. (هر چند این موضوع در حالت کلی برای اتوماتای سلولی درست
نیست؛ به عنوان مثال بسیاری از سفینه های فضایی با سرعت نور در دانه ها وجود دارند) با این حال این برای اشیاء ممکن است که با سرعت نور سفر کنند اگر آن ها به جای فضای خالی از مدیوم حرکت کنند. چنین رسانه ای شامل مسیرهای کهیر و خطوط سلول های زنده و مرده است. اگر با سرعت نور د کهکشان حرکت کنیم در۳۰ثانیه به ماه می رسیم و ۸/۳۰دقیقه به خورشید می رسیم و۲۰۰۰سال طول می کشد تا از کهکشان راه شیری خارج شده و چند میلیون سال طول می کشد تا به نزدیک ترین کهکشان برسیم. انتشار سریع تر از نور. الگوهای خاص می توانند به نظر برسند که با سرعت بیشتر از یک سلول در هر نسل حرکت می کنند اما مانند پدیده های سریع تر از نور در فیزیک این امر گمراه کننده است. به عنوان مثال "Star Gate", ترتیبی از سه گلایدر همگرا که متقابلاً در برخورد نابود می شوند. اگر یک سفینه فضایی سبک (LWSS) با گلایدرهای همگرا برخورد کند به نظر می رسد که در ۶ نسل ۱۱ حرکت رو به جلو انجام داده و در نتیجه سفری سریع تر از نور داشته است. این توهم به این خاطر اتفاق می افتد که واکنش حاصل از نابودی گلایدر با ایجاد و به زودی تخریب یکی دیگر از LWSSها همراه است. هنگامی که LWSS ورودی با گل
ایدرهای همگرا برخورد می کند به جای دیگر منتقل نمی شود اما به جای آن واکنش را به طوری که LWSS به تازگی ایجاد شده می تواند زنده بماند تغییر می دهد. تنها سیگنالی که منتقل می شود این است که تعیین کند آیا LWSS خروجی باید زنده بماند یا نه. این نیازی به رسیدن به مقصد خود ندارد تا بعد از اینکه LWSS منتقل شده است و بنابراین هیچ اطلاعاتی نیاز به سفر سریع تر از نور ندارد.
فرم باکوس نائور توسعه یافته یا EBNF در علوم رایانه ای، یک خانواده از نمادهای متاسینتاکس است که هر کدام از آن ها می توانند برای بیان یک دستور زبان مستقل از متن استفاده شود. EBNF برای توصیف زبان صوری استفاده می شود که می تواند یک زبان برنامه نویسی کامپیوتری هم باشد. این ها شامل فرمت های بنتاکس (BNF) است. ابتدا EBNF توسط نیکلاوس ویرت توسعه داده شد و برخی از مفاهیم را به صورت نحوی به کار برد. با این حال بسیاری از انواع EBNF در استانداردسازی یک استاندارد) (ISO/IEC 14977 را برای EBNF مورد تصویب قرار داده است. این مقاله از EBNF که توسط استاندارد مشخص شده است را برای تمام مثال های EBNFها استفاده می کند. دیگر انواع EBNF از قوانین نحوی متفاوت استفاده می کنند). مبانی. EBNF یک کد است که دستور زبان رسمی را بیان می کند. یک EBNF شامل علائم ترمینال و قوانین تولید نامحدود است که محدودیت هایی را در مورد این که چگونه نمادهای ترمینال را می توان به یک ترتیب قانونی ترکیب کرد ارائه می کند. مثال هایی از نمادهای ترمینال عبارت اند از حروف الفبا، علائم نگارشی و نشانه های سجاوندی. EBNF قوانین تولید را تعریف می کند که در آن دنباله های نم
ادها به ترتیب به صورت غیرانتصابی اختصاص داده می شوند. digit excluding zero = "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ; digit = "0" | digit excluding zero ; این قوانین تولید به صورت عددی غیرمنتظره ای است که در سمت چپ قرار داشته و آن ها را تعریف می کند. نمودار عمودی امکان جایگزینی را نشان می دهد و نمادهای ترمینال علامت نقل قول همراه یا یک نقطه متوقف می شود. از این رو یک رقم بوده و می تواند ۱ یا ۲ یا ۳ … ۹ باشد. یک قانون تولیدی همچنین می تواند دنباله ای از پایانه ها یا غیر ترمینال ها می باشد که هر کدام با یک کاما جدا شده اند. twelve = "1", "2" ; two hundred one = "2", "0", "1" ; three hundred twelve = "3", twelve ; twelve thousand two hundred one = twelve, two hundred one ; ساختارهایی که می توانند حذف یا تکرار شوند درون آکولاد نشان داده می شوند. natural number = digit excluding zero, { digit } ; در این مورد، رشته های 1, 2, … , 10, 12345, … عبارت های صحیح هستند. برای نشان دادن این مورد، همه موارد را در داخل پارانتزهای مجاور قرار می گیرند. ممکن است اغلب به صورت خودسرانه تکرار شوند. از جمله این که در هم
ه موارد وجود ندارد یک گزینه را می توان از طریق براکت مربعی نشان داد و این بدان معنی است که هر چیزی که درون مربع قرار دارد ممکن است فقط یک بار و نه در همه جا باشد. integer = "0" | ["-"], natural number ; بنابراین یک عدد صحیح صفر یا یک عدد طبیعی بیش از یک عدد اختیاری باشد. EBNF همچنین در میان موارد دیگر به نحوی برای توصیف تکرار ما اقدام می کند تا برخی از بخش های تولید را حذف کرده و نظرات را در دستور زیاد EBNF قرار دهد. جدول نمادها. در زیر استاندار ISO/IEC 14977 پیشنهاد شده توسط آر. اس اسکون است در صفحه ۷ و در جدول ۱ نشان داده شده است. مثال. حتی EBNF را می توان با استفاده از خود EBNF توصیف نمود. دستورالعمل زیر را در نظر بگیرید : letter = "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | "J" | "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R" | "S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z" | "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i" | "j" | "k" | "l" | "m" | "n" | "o" | "p" | "q" | "r" | "s" | "t" | "u" | "v" | "w" | "x" | "y" | "z" ; digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ; s
ymbol = "[" | "]" | "{" | "}" | "(" | ")" | "&lt;" | "&gt;" character = letter | digit | symbol | "_" ; identifier = letter , { letter | digit | "_" } ; terminal = "'" , character , { character } , "'" | '"' , character , { character } , '"' ; lhs = identifier ; rhs = identifier | terminal | "[" , rhs , "]" | "{" , rhs , "}" | "(" , rhs , ")" | rhs , "|" , rhs | rhs , "," , rhs ; rule = lhs , "=" , rhs , ";" ; grammar = { rule } ; یک زبان برنامه نویسی مانند پاسکال تعاریف را می تواند در EBNF به شرح زیر تعریف کند. (* a simple program syntax in EBNF − Wikipedia *) program = 'PROGRAM', white space, identifier, white space, 'BEGIN', white space, { assignment, ";", white space }, 'END.' ; identifier = alphabetic character, { alphabetic character | digit } ; number = ["-"], digit, { digit } ; string = '"' , { all characters - '"' }, '"' ; assignment = identifier , ":=" , ( number | identifier | string ) ; alphabetic character = "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | "J" | "K" | "L" | "M" | "N" | "O" |
"P" | "Q" | "R" | "S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z" ; digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ; white space = ? white space characters ? ; all characters = ? all visible characters ? ; زبان به راحتی می تواند با جریان های کنترل، عبارات ریاضی و دستورالعمل های ورودی و خروجی گسترش یابد و سپس یک زبان برنامه نویسی کوچک قابل استفاده است. مزایای BNF. هر دستور زبان EBNF نیز می تواند در BNF نمایش داده شود. اگر چه نمایه های آن دارای عمر طولانی تری می باشند. به عنوان مثال گزینه ها و تکرارها نمی تواند به طور مستقیم در BNF بیان شود و نیازمند استفاده از یک قانون متوسط یا تولید جایگزین است که تعریف شده یا چیزی را به طور اختیاری و تکراری تولید کرده است. همان سازنده ها هنوز هم می توانند در EBNF استفاده شوند. BNF از نماد (&lt;,&gt;, |, ::=) برای خود استفاده می کند، اما نقل قول ها در اطراف رشته های ترمینال را شامل نمی شود. این مانع از این کاراکترها در زبان می شود و نیاز به یک نماد ویژه برای رشته خاصی دارد. EBNF پایانه ها به وضوح در داخل علامت “ “ یا ' ' محصور می شوند. براکت زاویه را برای غی
رترمینال ها می توان حذف نمود. همچنین BNF تنها می تواند یک قاعده را در یک خط نشان دهد. در حالی که در EBNF دستورهای متناوب وجود داشته است. علاوه بر این، EBNF شامل مکانیزیم هایی برای پیشرفت بوده که تعریف تعدادی از تکرارها به استثنای جایگزین های کامنت و غیره را دارد. معاهده عا. معاهده های زیر استفاده می شوند. ۱- هر شناسه فرعی BNF به عنوان یک یا چند عبارت با هم ترکیب شده اند. ۲- یک فراشناسایی که با استفاده از علایم پایان می یابد. براساس نام نماد ترمینال BNF تمدید شده است. کاراکترهای نمادی که هر اپراتور BNF از آن تمدید شده و اولویت ضمنی آن را نشان می دهند. - except-symbol , concatenate-symbol | definition-separator-symbol = defining-symbol ; terminator-symbol . terminator-symbol اولویت عادی توسط جفت های براکت زیر لغو می شود. ' first-quote-symbol first-quote-symbol ' " second-quote-symbol second-quote-symbol " (* start-comment-symbol end-comment-symbol *) (start-group-symbol end-group-symbol) [start-option-symbol end-option-symbol] ? special-sequence-symbol special-sequence-symbol ? نماد اول آپستروف است که توسط ISO/
IEC 646:1991 تعریف شده است. با این حال این استاندارد کاراکتر ISO هفت بیتی را برای تبادل اطلاعات را به عنوان یک مرجع قانونی و بدون هیچ نامی از سایر مجموعه کاراکترها را دارد؛ بنابراین به طور رسمی، هیچ گونه سردرگمی با کاراکترهای یونیکد خارج از محدوده هفت بیتی ASCTE را ندارد. به عنوان مثال قوانین زیر برای بیان تکرار نشان داده شده اند. aa = "A"; bb = 3 * aa, "B"; cc = 3 * [aa], "C"; dd = {aa}, "D"; ee = aa, {aa}, "E"; ff = 3 * aa, 3 * [aa], "F"; gg = {3 * aa}, "G"; رشته های ترمینال تعریف شده توسط این قوانین به شرح زیر می باشند. aa: A bb: AAAB cc: C AC AAC AAAC dd: D AD AAD AAAD AAAAD etc. ee: AE AAE AAAE AAAAE AAAAAE etc. ff: AAAF AAAAF AAAAAF AAAAAAF gg: G AAAG AAAAAAG etc. توسعه پذیری. با توجه به استاندارد ISO 14977، EBNF به معنی توسعه پذیری بوده و دو امکان برای آن ذکر شده است. اولین قسمت بخشی از زبان EBNF بوده که دارای دنباله خاصی است و متن دلخواه در یک دنباله خاص فراتر از محدوده استاندارد EBNF می باشد. برای مثال کاراکتر فضای خالی می تواند توسط قوانین زیر بیان شود. space = ? US-ASCII character 32 ?; دومین حالت
برای توسعه با استفاده از این واقعیت است که پرانتز در EBNF نمی تواند در کنار شناسه قرار گیرد؛ لذا EBNF زیر معتبر است. something = foo, ( bar ); براساس شرایط مثال زیر EBNF معتبر نیست. something = foo ( bar ); بنابراین گسترش EBNF می تواند با استفاده از این علامت ها انجام شود. به عنوان مثال در گرامر Lisp، تابع کاربردی را می توان با قانون زیر بیان نمود. function application = list( symbol, { expression } );
یادگیری عمیق، یادگیری ژرف یا ژرف آموزی (به بیانی دیگر: یادگیری ژرف ماشین، یادگیری ساختار ژرف یا یادگیری سلسله مراتبی) یک زیر شاخه از یادگیری ماشین و بر مبنای مجموعه ای از الگوریتم ها است که در تلاشند تا مفاهیم انتزاعی سطح بالا در دادگان را مدل کنند که این فرایند را با استفاده از یک گراف عمیق که دارای چندین لایه پردازشی متشکل از چندین لایه تبدیلات خطی و غیرخطی اند، مدل می کنند. به بیان دیگر پایهٔ آن بر یادگیری نمایش دانش و ویژگی ها در لایه های مدل است. الگوریتم های DL از مجموعه های بزرگی از داده های آموزشی برای شناسایی روابط بین عناصری مانند اَشکال، کلمات و رنگ ها استفاده می کنند. این روابط به الگوریتم های DL برای پیش بینی کمک می کنند. الگوریتم های DL می توانند بسیاری از روابط (از جمله روابطی که شاید توسط انسان تشخیص داده نشوند) را شناسایی کرده و داده های بسیار پیچیده را تفسیر یا پیش بینی کنند. به قولی دیگر «یادگیری عمیق» یک نوع «یادگیری ماشین» به همراه شبکه های عصبی چندلایه است که با دقتی فزاینده الگوهای موجود در داده ها کشف کرده و به همین خاطر می تواند علائق کاربر را بشناسد، اشیا را شناسایی کرده و زبان ها را
بفهمد. یک نمونه آموزشی (برای نمونه: تصویر یک گربه) می تواند به صورت های گوناگون بسان یک بردار ریاضی پر شده از مقدار به ازای هر پیکسل و در دید کلی تر به شکل یک مجموعه از زیرشکل های کوچک تر (نظیر اعضای صورت گربه) مدل سازی شود. برخی از این روش های مدل سازی سبب ساده شدن فرایند یادگیری ماشین (برای نمونه: تشخیص تصویر گربه) می شوند. در یادگیری عمیق امید به جایگزینی استخراج این ویژگی های تصویر به دست بشر (مانند اعضای گربه) با روش های کامل خودکار بی نظارت و نیمه نظارتی وجود دارد. انگیزهٔ نخستین در به وجود آمدن این ساختار یادگیری از راه بررسی ساختار عصبی در مغز انسان الهام گرفته شده است که در آن یاخته های عصبی با فرستادن پیام به یکدیگر درک را امکان پذیر می کنند. بسته به فرض های گوناگون در مورد نحوهٔ اتصال این یاخته های عصبی، مدل ها و ساختارهای مختلفی در این حوزه پیشنهاد و بررسی شده اند، هرچند که این مدل ها به صورت طبیعی در مغز انسان وجود ندارد و مغز انسان پیچیدگی های بیشتری دارد. این مدل ها نظیر شبکه عصبی عمیق، شبکه عصبی هم گشتی، شبکه باور عمیق و چندین نمونه دیگر؛ پیشرفت های خوبی را در حوزه های پردازش زبان های طبیعی و