payamvha/North_RAG huggingface dataset:
گالیم استیل‌استونات، یا به صورت خلاصه Ga(acac)۳، یک کمپلکس شیمیایی با فرمول Ga(C۵H۷O۲)۳ است. این کمپلکس گالیم با سه لیگاند استیل‌استونات در پژوهش‌ها مورد استفاده قرار می‌گیرد. این مولکول با تقارن D۳، با دیگر سه‌تایی(استیل‌استونات)های هشت‌ضلعی هم‌شکلی دارد.
فصل اول پرشیاز گات تلنت، یک مسابقه نمایش استعدادیابی ایرانی، ضبط شده در سوئد در سال ۹۹–۱۳۹۸ (۲۱–۲۰۲۰)، از ۱۱ بهمن ۱۳۹۸ (۳۱ ژانویه ۲۰۲۰) از شبکه ام‌بی‌سی پرشیا آغاز شد. داوران فصل اول پرشیاز گات تلنت ابراهیم حامدی، مهناز افشار، آرش لباف و نازنین نور و مجریان برنامه فرزان اطهری و تارا گرامی بودند. این فصل در ۱۱ قسمت ۶۰ تا ۱۲۰ دقیقه‌ای پخش شد. قهرمان این دوره نوید جایزهٔ ۱۰۰٫۰۰۰ یورو و نایب‌قهرمان یاسمین جایزهٔ ۲۵٫۰۰۰ یورو را بردند. با توجه به شیوع جهانی ویروس کرونا (کووید ۱۹)، و به عنوان یک اقدام پیشگیرانه،
کرونا (کووید ۱۹)، و به عنوان یک اقدام پیشگیرانه، مدیریت ام‌بی‌سی پرشیا تصمیم به تعویق تولید و پخش قسمت‌های زندهٔ برنامه پرشیاز گات تلنت گرفت. این تصمیم برای جلوگیری از انتشار و شیوع این ویروس و همدردی با کسانی که تحت تأثیر این موضوع قرار گرفته‌اند گرفته شد؛ بنابراین تصمیم ادامهٔ این فصل ماه‌ها ناتمام ماند. در نهایت از ۱۷ بهمن ۱۳۹۹ پخش نیمه‌نهایی آغاز شد و ۱ اسفند ۱۳۹۹ مرحلهٔ فینال پخش شد.
در کامپایلرسازی، به رشته‌ای از کدها که هیچ انشعاب وارد شونده ای به غیر از ورودی و هیچ انشعاب خارج شونده‌ای به غیر از محل خارج شدن از آن رشته کد نداشته باشد، بلوک پایه می‌گویند. این محدود بودنْ قابلیت آنالیز شدن را به بلوک پایه می‌دهد. کامپایلرها معمولاً در قدم اول، برنامه‌ها را به بلوک‌های پایه تجزیه می‌کنند. توسط بلوک‌های پایه میان راس‌ها و یال‌های گراف روند کنترلی را مشخص کرد. تعریف. در ابتدا تعریف شهودی از یک بلوک پایه را ارائه می‌کنیم و در ادامه تعریف رسمی آن را بیان می‌کنیم. تعریف شهودی بلوک پایه به
رسمی آن را بیان می‌کنیم. تعریف شهودی بلوک پایه به این صورت است: کدهایی که در بلوک پایه قرار می­گیرند دو ویژگی زیر را دارند: تحت این شرایط، هر زمانی که اولین دستور در بلوک پایه اجرا شود، تمام دستورها دیگر بلوک پایه نیز باید به اجبار به ترتیب اجرا شوند. منظور از "کد" در اینجا انواع مختلف کد است یعنی می‌تواند کد منبع، کد اسمبلی و یا هر ترتیب دیگری از دستورها باشد. حال تعریف رسمی را بیان می‌کنیم که به این صورت است: تربیت از دستورها تشکیل یک بلوک پایه را می دهند اگر: این تعریف رسمی از تعریف شهودی عمومی‌تر است.
اگر: این تعریف رسمی از تعریف شهودی عمومی‌تر است. برای مثال بر اساس این تعریف، امکان اینکه پرش‌های غیرشرطی مقصدهایی داشته باشند که انواع دیگر پرش به آن مقصدها پرش نمی‌کنند را فراهم می‌کند. تعریف رسمی ویژگی‌هایی را برای بلوک پایه‌ها ایجاد می‌کند که کار کردن با آن‌ها را در زمان اجرای الگوریتم‌ها آسان می‌کند. به بلوک‌های که از آن‌ها وارد یک بلوک پایه می‌شویم، اجداد آن بلوک پایه می‌گویند. همچنین به بلوک‌هایی که وقتی از یک بلوک پایه خارج می‌شویم، به آن‌ها وارد می‌شویم، جانشینان آن بلوک پایه می‌گویند. شناسایی
می‌شویم، جانشینان آن بلوک پایه می‌گویند. شناسایی بلوک های پایه. برای پیدا کردن بلوک های پایه یک الگوریتم ساده وجود دارد. ابتدا این الگوریتم را به صورت کلی توصیف کرده و در ادامه آن را به طور کامل تشریح می‌کنیم. توصیف کلی الگوریتم: اجرا کننده‌ی الگوریتم در ابتدا باید یک دور کد را خوانده و مرزهای بلوک پایه را شناسایی کند (مرزهای بلوک پایه دستورها شروع و پایان بلوک می باشند) و آن‌ها را نشانه‌گذاری می‌کند. دستور شروع بلوک پایه می‌تواند مقصد یک دستور پرشی و دستور پایان بلوک می تواند یک دستور پرشی باشد. حال کد را
پایان بلوک می تواند یک دستور پرشی باشد. حال کد را در این نقاط "برش" می‌دهیم؛ بلوک‌های پایه تکه کدهایی هستند که باقی می‌مانند. توجه داشته باشید که این روش همیشه بلوک پایه ماکسیمال را شناسایی نمی‌کند، ولی بنابر تعریف رسمی، بلوک های پایه پیدا شده دارای شرایط کافی می باشند ( بلوک پایه ماکسیمال بلوکی است که نمی‌توان آن را بدون نقض کردن تعریف بلوک پایه، توسط بلوک های مجاورش گسترش داد). حال این الگوریتم را به صورت کامل شرح می‌دهیم: ورودی: یک ترتیب از دستورها ( که معمولاً کدهای سه آدرسی هستند). خروجی: یک لیست از
معمولاً کدهای سه آدرسی هستند). خروجی: یک لیست از بلوک های پایه به صورتی که هر دستور سه آدرسی در یک بلوک پایه قرار گیرد. مرحله اول: ابتدا هدرها را در کد مشخص کنید. هدرها دستورهایی هستند که در یکی از شرایط زیر صدق می کنند: مرحله دوم: با شروع از یک هدر، تمام دستورها بعد از آن تا هدر بعدی در بلوک پایه مربوط به هدر اولیه قرار می گیرد. بنابراین هر بلوک پایه یک هدر دارد. دستورهایی که در پایان یک بلوک پایه ظاهر می شوند یکی از موارد زیر می باشند: دستورهایی که در ابتدا یک بلوک پایه ظاهر می شوند یکی از موارد زیر می
یک بلوک پایه ظاهر می شوند یکی از موارد زیر می باشند: مثال. قطعه کد زیر را برای ضرب داخلی دو بردار a و b که طول هر یک برابر 10 می باشد، در نظر بگیرید. &lt;pre&gt; begin prod :=0; i:=1; do begin prod :=prod+ a[i] * b[i]; i :=i+1; end while i &lt;= 10 end &lt;pre/&gt; کد سه آدرسی برای کد منبع فوق به شکل زیر است: &lt;pre&gt; B1 (1) prod := 0 (2) i := 1 B2 (3) t1 := 4* i (4) t2 := a[t1] (5) t3 := 4* i (6) t4 := b[t3] (7) t5 := t2*t4 (8) t6 := prod+t5 (9) prod := t6 (10) t7 := i+1 (11) i := t7 &lt;pre/&gt; بلوک
t6 (10) t7 := i+1 (11) i := t7 &lt;pre/&gt; بلوک پایه B1 شامل دستورها (1) تا (2) و بلوک پایه B2 شامل دستورها (3) تا (12) است. توجه کنید طبق قواعد گفته شده دستور (1) دستور شروع برنامه می باشد بنابراین یک هدر است. همچنین دستور (3) مقصد دستوری پرشی در (12) می باشد بنابراین این دستور نیز یک هدر است.
ویل کوئرور (; – ) بازیکن فوتبال اهل پادشاهی هلند بود. از باشگاه‌هایی که در آن بازی کرده‌است می‌توان به باشگاه فوتبال رودا جی‌سی کرکراد اشاره کرد.
کالیا ، یک شهرک اسرائیلی در سال ۱۹۲۹ ساخته شد و در سال ۱۹۴۸ توسط ارتش عربی اردن تخریب شد و پس از جنگ شش روزه اعراب و اسرائیل دوباره ساخته شد . این شهرک از نظر جغرافیایی در شما دریاچه مرده قرار دارد . وجه تسمیه نام کالیا. کالیا به نام لاتینی عنصر پتاسیم بر می‌گردد که به وفور در منطقه یافت می‌شود . البته کالیا را هم می‌توان مخفف عبارت عبری קם לתחייה ים המוות یعنی دریای مرده به زندگی بازگشته است هم دانست . اقتصاد. اقتصاد مردم بومی کالیا به کشاورزی به خصوص تولید لبنیات و خرما وابسته است . اما به دلیل در مسیر
لبنیات و خرما وابسته است . اما به دلیل در مسیر گردشگری بودن درآمدی را هم حاصل می‌کنند .
حیات الحیوان، حیات الحیوان الکبری یا منافع الحیوان، کتابی از کمال‌الدین دمیری درباره روحیات و حالات حیوانات و نیز فوائد و مضرات آنها در پزشکی است و به زبان عربی نوشته شده است؛ وی روایات و آیات قرآنی را که در ارتباط با موضوع مورد نظر هستند گرد آورده است. محمدتقی تبریزی در دورهٔ صفویه آن را با عنوان خواص الحیوان به فارسی برگردانده‌است. مولف در این کتاب به ذکر نام حیواناتی که اسامی آنها به گوش وی خورده و یا آنها را در کتب یونانی‌ها و یا عرب‌های قدیم و نیز آثاری که درباره طب و حیوانات در زمان‌های نزدیک به عصر
که درباره طب و حیوانات در زمان‌های نزدیک به عصر مؤلف نگاشته شده است، یافته است می‌پردازد. ساختار کتاب. این کتاب در سه بخش مجزا نگارش پیدا کرده است؛ در فصل اول به مفهوم تاثیر به مثابه اصطلاحی ادبی اشاره شده است. این فصل صرفاً جهت رفع ابهام از تعاریف و مصادیق بازنگری گشته اما در فصل دوم و سوم در مورد تاثیر قرآن بر عناصر بیانی و بدیعی صور خیال صحبت شده است. مولف بعد از آنکه نام حیوان را به صورت کامل و دقیق ضبط می‌کند و اصل لغوی آن را معرفی می‌نماید، به توصیف حیوان پرداخته و سپس اخبار و روایاتی را که بر طبیعت
پرداخته و سپس اخبار و روایاتی را که بر طبیعت و سرشت آن حیوان دلالت دارد یادآور می‌شود. در بخش روایات دسته‌ای از احادیث نبوی و آیات قرآنی را که در ارتباط با موضوع مورد نظر هستند گرد می‌آورد و پس از آن اشعار و امثال و حکم متناسب با موضوع را نیز ذکر می‌کند. در ادامه نظرات فقهاء را درباره حیوان مورد نظر از جهت حلیت و حرمت خوردن آن یادآور شده و در پایان به بیان فوائد و مضارت طبی آن می‌پردازد.
جام در جام اروپا ۶۲–۱۹۶۱، دومین دوره از مسابقات فوتبال جام برندگان جام اروپا بود. تیم‌های اتلتیکو مادرید اسپانیا و مدافع عنوان قهرمانی، فیورنتینای ایتالیا، دیدار فینال را برگزار کردند. از این فصل بازی نهایی به صورت تک دیدار برگزار شد. بازی نخست با نتیجه مساوی به پایان رسید و براساس قوانین کار به دیدار تکراری کشیده شد. در بازی تکراری اتلتیکو مادرید با نتیجه ۳–۰ به پیروزی رسید و برای نخستین بار فاتح جام در جام اروپا شد. در این دوره یوفا برای نخستین بار سازماندهی مسابقات را بر عهده گرفت. مرحله اول. دور برگشت.
مسابقات را بر عهده گرفت. مرحله اول. دور برگشت. "فیورنتینا در مجموع ۹–۳ برنده شد." "لیتشوئس در مجموع ۲–۱ برنده شد." یک‌چهارم نهایی. دور برگشت. "فیورنتینا در مجموع ۴–۲ برنده شد." نیمه نهایی. دور برگشت. "اتلتیکو مادرید در مجموع ۵–۰ برنده شد." "فیورنتینا در مجموع ۳–۰ برنده شد."
جایزه رینوس میشل () جایزه‌ای سالانه است در اتحادیه فوتبال سلطنتی هلند. این جایزه توسط اتحادیه مربیان فوتبال حمایت می‌شود.این جایزه به رینوس میشل نامیده می‌شود که در سال ۱۹۹۹ توسط فیفا به عنوان مربی قرن معرفی شد. برندگان جایزه یک عمر دستاورد. سرمربیان زیر جایزه یک عمر دستاورد را برای کمک‌های خود در کل حرفه‌ای‌شان دریافت کرده‌اند:
گوش مروارید، با عنوان اصلی ، یک سریال انیمه ژاپنی محصول سال ۱۹۸۶ به نویسندگی "شیفوده آساکورا" و توسط "جونیشی ساتو" کارگردانی شده‌است. این سریال که توسط استودیوی توئی انیمیشن تولید شده و شامل ۵۲ قسمت نیم ساعته است، از ۱۹ ژانویه ۱۹۸۶ تا ۱۱ ژانویه ۱۹۸۷ در تی‌وی آساهی در ژاپن پخش شد. داستان. در این اثر ماجراهای پتی خرگوش، بابی خرس و خانواده‌های آنها، در شهرستان کوچکی به نام "مَپِل" روایت می‌شود.
در زبان های برنامه‌نویسی وابسته بودن یک عملگر یک ویژگی است که چگونگی اولویت عملگرها را در غیاب پرانتز مشخص می‌کند. به طور کلی در اکثر زبان های برنامه نویسی عملگرها با ترتیب خاصی اعمال می‌شوند، که این قوانین تحت عنوان اولویت عملگرها و وابستگی عملگرها شناخته می‌شوند. اگر دو عملگر با سطح اولویت یکسان هم قبل و هم بعد از یک عملوند بیایند، قانون وابستگی عملگر به کامپایلر می‌گوید که آن عملگرها را از سمت راست به چپ و یا چپ به راست به ترتیب اولویت بدهد. به عنوان مثال، در عبارت formula_1 اولویت عملگرهای ضرب و تقسیم،
در عبارت formula_1 اولویت عملگرهای ضرب و تقسیم، هر دو در یک سطح قرار دارند. از آنجا که ضرب و تقسیم از سمت چپ به راست ارزیابی می‌شود، جواب این عبارت formula_2 می‌شود. و همچنین مثال دیگری از این حالت codice_1 است. عملگرها به چهار دستهٔ وابسته (یعنی عملیات می‌تواند به صورت دلخواه گروه بندی شوند)، وابستهٔ چپ (به معنای این که عملیات‌ها از سمت چپ گروه بندی می شوند) و وابستهٔ راست (به معنای این که عملیات‌ها از سمت راست گروه بندی شده اند) یا غیر وابسته (به معنای این است که عملیات به دلیل ناسازگاری با نوع ورودی
این است که عملیات به دلیل ناسازگاری با نوع ورودی نمی‌تواند گروه بندی شود) تقسیم می‌شند. تعریف نوع وابستگی عملگرها و اولویت آن ها در تعریف زبان برنامه نویسی مشخص می‌شود. در زبان‌های برنامه‌نویسی مختلف ممکن است نوع وابستگی و اولویت برای یک عملگر متفاوت باشد. برای فهم تفاوت این چهار دسته عبارت formula_3 را در نظر بگیرید. اگر کامپایلر عملگر ~ را وابسته ی چپ در نظر گرفت، این عبارت را به صورت formula_4 درنظر میگیریم. اگر کامپایلر عملگر formula_5 را وابستهٔ راست در نظر گرفت، این عبارت را به صورت formula_6 در نظر
نظر گرفت، این عبارت را به صورت formula_6 در نظر می‌گیریم. و اگر عملگر غیر وابسته بود، به ارور سینتکسی بر می‌خوریم یا ممکن است که این حالت با توجه به نوع تعریف عملگر معنای خاصی داشته باشد. جدول وابستگی در زبان های برنامه نویسی. جدول وابستگی نشان دهنده ی نوع وابستگی هر عملگر موجود در آن زبان برنامه‌نویسی است. جدول زیر یک جدول اولویت در زبان جاوا است که نشان‌دهندهٔ نوع وابستگی هر عملگر موجود در این زبان است. در این جدول هر گروه از عملگرهای جدول تقدم یکسان دارند. هر چه تقدم بالاتر باشد، اولویت گروه بندی بالاتر
هر چه تقدم بالاتر باشد، اولویت گروه بندی بالاتر است. مثال. همان‌طور که ذکر شد، وابستگی عملگرها وقتی مطرح می‌شود که عملگرها دارای اولویت یکسانی باشند. به طور مثال عملگرهای ضرب و تقسیم اولویت یکسانی دارند. عبارت formula_7 را در نظر بگیرید. اگر وابستگی راست را برای این عملگرها اعمال کنیم، حاصل عبارت به صورت formula_8 محاسبه می‌شود. اما اگر وابستگی چپ را در نظر بگیریم، عبارت به صورت formula_9 به دست می‌آید. در عبارات ریاضی و برای استفاده‌های معمولی، عملیات‌های جمع، تفریق، ضرب و تقسیم با وابستگی چپ در نظر گرفته
تفریق، ضرب و تقسیم با وابستگی چپ در نظر گرفته می‌شوند. عملیات مقداردهی نیز معمولاً با وابستگی راست نمایش داده می‌شود. اما عملیات‌های توان‌رسانی قاعده کلی ندارند و ممکن است با وابستگی چپ یا راست نمایش داده شوند. در قاعده‌ی کلی، عملگرهایی که اولویت یکسانی دارند باید وابستگی یکسانی داشته باشند. برای درک بهتر عبارت codice_2 را با وابستگی راست در نظر بگیرید. یک تجزیه‌کننده که عبارت را از چپ به راست می‌خواند، با توجه به وابستگی راست عملگر codice_3 به صورت زیر عمل می‌کند: با استفاده از الگوریتم جستجوی اول عمق،
می‌کند: با استفاده از الگوریتم جستجوی اول عمق، گام‌های زیر بر روی درخت اجرا می‌شود: اگر برای عملگر توانی وابستگی چپ در نظر گرفته شود، عبارت codice_17 به دست خواهد آمد. وابستگی راست در عملگر مقداردهی. عملگر مقداردهی (=) در اکثر زبان‌های برنامه‌نویسی دستوری با وابستگی راست تعریف شده‌است. همچنین مقداردهی به صورت یک اصطلاح تعریف می‌شود. تفاوت اصطلاح با عبارت این است که اگر در انتهای یک اصطلاح codice_18 اضافه کنیم، به عبارت تبدیل می‌شود. در نتیجه امکان مقداردهی زنجیره‌ای به وجود می‌آید و مقدار یک مقداردهی به
زنجیره‌ای به وجود می‌آید و مقدار یک مقداردهی به عنوان ورودی به یک مقداردهی دیگر داده می‌شود. به طور مثال در زبان C ، با اجرای مقداردهی formula_10 ، مقدار متغیر b در a قرار داده می‌شود. وابستگی راست عملگر مقداردهی این امکان را ایجاد می‌کند که اصطلاحاتی نظیر formula_11 به صورت formula_12 ترجمه شود و در نتیجه مقدار متغیر c در هر دو متغیر a و b قرار گیرد. اما در زبان C++ مقداردهی a = b وابستگی چپ دارد . لذا formula_11 به صورت formula_14 در می‌آید. و معادل با عبارات formula_15 عمل می‌کند.
هنس وایسوایلر (؛ – ) بازیکن فوتبال اهل آلمان بود. از باشگاه‌هایی که در آن بازی کرده‌است، می‌توان به باشگاه فوتبال کلن اشاره کرد.
ابراهیم داروغه‌زاده (زادهٔ ۱۳۴۹ در تهران) پزشک و سینماگر ایرانی است. او دبیری سه دورهٔ جشنوارهٔ فیلم فجر را از سال ۱۳۹۶ تا ۱۳۹۸ بر عهده داشته‌است. سمت‌ها. داروغه‌زاده مدتی مدیرعامل مؤسسه رسانه‌های تصویری و مدتی نیز مدیرعامل مؤسسهٔ تصویر شهر بود. از دیگر سوابق مدیریتیِ او می‌توان به ریاست پخش شبکه چهار سیما و مدیریت گروه اجتماعی شبکه اول سیما اشاره کرد. داروغه‌زاده از خرداد ۱۳۹۶ تا تیر ۱۳۹۸ معاون ارزشیابی و نظارت سازمان سینمایی بود.
تجزیه و تحلیل جریان داده یکی از روش‌هایی است که با استفاده از آن می‌توان اطلاعات مربوط به داده‌هایی که در نقاط مختلف یک برنامهٔ رایانه‌ای محاسبه می‌شوند را فراهم کرد. گراف روند کنترلی برای تعیین قسمت‌های برنامه که به تعریف یک متغیر یا مقداردهی یک متغیر منجر شده‌است، استفاده می‌شود. تحلیل جریان داده اطلاعاتی را تولید می‌کند که معمولاً کامپایلرها از آن برای بهینه‌سازی برنامه استفاده می‌کنند. در یک گراف کنترل جریان هر گره در گراف یک بلوک پایه را نشان می‌دهد. بلوک پایه مجموعه ای از دستورالعمل‌های متوالی است به
پایه مجموعه ای از دستورالعمل‌های متوالی است به طوری که هیچ دستور پرشی به این خطوط به جز خط اول وجود نداشته باشد و به جز خط آخر هیچ‌کدام ازین دستورها پرشی نباشند؛ در واقع این مجموعه دستورالعمل پشت سر هم و به ترتیب اجرا می‌شوند. یک راه ساده برای پیاده‌سازی تجزیه و تحلیل جریان داده این است که معادله جریان داده را برای هر گره از گراف روند کنترلی تنظیم کنیم و سپس به صورت محلی خروجی هر گره را از ورودی‌های آن محاسبه کنیم و این کار را تا زمانی که سیستم به نقطه ثابتی برسد تکرار کنیم. اصول اساسی. تجزیه و تحلیل جریان
برسد تکرار کنیم. اصول اساسی. تجزیه و تحلیل جریان داده فرایند تولید اطلاعات دربارهٔ شیوه به کار رفتن متغیرهای تعریف شده در برنامه است و تلاش می‌کند اطلاعات خاصی را در هر نقطه از اجرا به دست بیاورد. معمولاً به دست آوردن این اطلاعات در محدودهٔ بلوک‌های پایه کفایت می‌کند؛ زیرا با استفاده از آن به راحتی می‌توان اطلاعات نقاط مختلف بلوک پایه را به دست آورد. در تحلیل جریان رو به جلو، حالت خروجی یک بلوک تابعی از حالت ورودی آن بلوک است. این تابع ترکیب اثرات عبارات موجود در بلوک می‌باشد. حالت ورودی یک بلوک تابعی از
در بلوک می‌باشد. حالت ورودی یک بلوک تابعی از حالت‌های خروجی اجداد آن بلوک می‌باشد. در نتیجه مجموعه ای از معادلات جریان داده به دست می‌آید: برای هر بلاک b: formula_1 formula_2 در این‌جا formula_3 تابع انتقال بلوک formula_4 می‌باشد. این تابع روی حالت ورودی formula_5 کار می‌کند و حالت خروجی formula_6 را نتیجه می‌دهد و formula_7 عملگر پیوند است که حالت‌های خروجی اجداد بلوک formula_4 را ترکیب کرده و حالت ورودی formula_4 را نتیجه می‌دهد. بعد از حل این مجموعه از معادلات، می‌توان از حالت‌های ورودی و خروجی بلوک‌ها
می‌توان از حالت‌های ورودی و خروجی بلوک‌ها برای استخراج ویژگی‌های برنامه در محدوده بلوک‌های پایه استفاده کرد. با اعمال کردن تابع انتقال هر عبارت به صورت جداگانه، می‌توان اطلاعات مطلوب را در هر نقطه از بلوک پایه به دست آورد. هر نوع خاصی از تحلیل جریان داده، تابع انتقال و عملگر پیوند خاص خود را دارد. برخی از مسئله‌های جریان داده، به تحلیل جریان رو به عقب نیاز دارند. این تحلیل به جز تابع انتقال و عملگر پیوند تقریباً مشابه تحلیل رو به جلو می‌باشد؛ تابع انتقال در این تحلیل روی حالت خروجی بلوک اعمال می‌شود و حالت
این تحلیل روی حالت خروجی بلوک اعمال می‌شود و حالت ورودی آن را نتیجه می‌دهد و عملگر پیوند روی حالت‌های ورودی بلوک‌های فرزند اعمال شده و حالت خروجی یک بلوک را نتیجه می‌دهد. می‌توانید شمایی ساده از گراف کنترل جربان داده را در تصویر زیر مشاهده کنید: حل مسائل تجزیه و تحلیل جریان داده. رایج‌ترین روش برای حل مسائل تجزیه و تحلیل جریان داده، استفاده از الگوریتم‌های تکراری است. محبوبیت این الگوریتم‌ها به خاطر سرعت، قدرت و سادگی پیاده‌سازی آن هاست. این الگوریتم، با یک تقریب از حالت ورودی هر بلوک شروع می‌کند و حالت
یک تقریب از حالت ورودی هر بلوک شروع می‌کند و حالت خروجی را با اعمال کردن تابع انتقال هر بلوک بر روی حالت ورودی آن، به دست می‌آورد. حالت ورودی جدید برای هر بلوک با اعمال عملگر پیوند روی اجداد آن بلوک در گراف روند کنترلی به دست می‌آید. حال الگوریتم روی حالت‌های اولیه جدید تکرار خواهد شد و این تکرار تا زمانی ادامه پیدا می‌کند که سیستم به نقطه ثابتی برسد به این معنا که با تکرار فرایند الگوریتم، حالت ورودی و خروجی جدید برای هر بلوک با حالت ورودی و خروجی قبلی آن تفاوتی نکند. همگرایی. همان‌طور که پیش تر گفته شد،
تفاوتی نکند. همگرایی. همان‌طور که پیش تر گفته شد، در روش استفاده از الگوریتم‌های تکراری، تکرار الگوریتم تا زمانی ادامه پیدا می‌کند که به نقطه ثابتی برسد؛ پس برای اینکه در عمل بتوانیم از این روش استفاده کنیم، سیستم باید همگرا باشد. همگرایی سیستم با اعمال یک سری شرط روی دامنه مقادیر حالت‌ها، تابع انتقال و عملگر پیوند تضمین خواهد شد. این شروط عبارتند از: با وجود این دو شرط نتیجه یک تابع یکنوای کراندار است و یک تابع یکنوای کراندار حتماً همگرا است. مقداردهی اولیه. همان‌طور که پیش تر گفته شد، الگوریتم با یک
اولیه. همان‌طور که پیش تر گفته شد، الگوریتم با یک تقریب از حالت ورودی هر بلوک شروع می‌شود. این مقدار دهی اولیه باید به گونه ای باشد که نتیجه نهایی صحیح و دقیق باشد برای مثال چنانچه قرار است نتایج برای بهینه‌سازی کد در کامپایلرها مورد استفاده قرار بگیرد، نتیجه حاصل باید منطق برنامه را حفظ کند. اهمیت ترتیب پیمایش بلوک‌ها. ترتیب پیمایش بلوک‌ها در فرایند اجرای الگوریتم روی کارایی الگوریتم و زمان اجرای آن، تأثیر مستقیم دارد. عامل مهم دیگری که در این بحث اهمیت دارد، رو به جلو یا رو به عقب بودن تحلیل در گراف روند
رو به جلو یا رو به عقب بودن تحلیل در گراف روند کنترل می‌باشد. اگر تحلیل ما رو به جلو باشد، بهتر است اجداد هر گره در گراف، قبل از آن شده باشند؛ چرا که حالت هر بلوک وابسته به حالات اجداد آن در گراف خواهد بود و اگر قبل از دیدن هر گره اجداد آن دیده شده باشند، سرعت همگرایی الگوریتم بیشتر خواهد بود. اگر در گراف حلقه نداشته باشیم، می‌توان ترتیبی از بلوک‌ها را پیدا کرد که تنها با یک بار اجرای الگوریتم روی هر بلوک، مقدار نهایی و صحیح هر بلوک به دست آید. برخی از ترتیب‌های ممکن برای پیمایش گراف در اجرای الگوریتم
ترتیب‌های ممکن برای پیمایش گراف در اجرای الگوریتم عبارتند از: الگوریتم تکرار راند-رابین. الگوریتم تکرار راند-رابین یکی از الگوریتم‌هایی است که برای حل مسائل تجزیه و تحلیل جریان داده از آن استفاده می‌شود. در این الگوریتم در هر نوبت تکرار الگوریتم، همه بلاک‌ها از نو پیمایش می‌شوند و تا رسیدن به نقطه ثابت تکرار ادامه خواهد داشت. شبه کد این الگوریتم مشابه شبه کد زیر است: ترتیب پیمایش گره‌ها در این روش ثابت است. رویکرد لیست کار. این روش، مدل بهبود یافته‌ای از الگوریتم راند-رابین است. در این روش، تکرار تنها در
راند-رابین است. در این روش، تکرار تنها در بخشی از گراف که در حال تغییر است انجام می‌شود. در این الگوریتم پس از مقداردهی اولیه، یک لیست به نام لیست کار ایجاد می‌شود که در ابتدای الگوریتم همهٔ گره‌ها در این لیست قرار دارند. در هر مرحله، یک گره از لیست کار حذف می‌شود و اطلاعات مربوط به جریان دادهٔ آن، مشابه آنچه پیش تر توضیح داده شد، به روزرسانی می‌شود. اگر این به روزرسانی باعث تغییر در اطلاعات گره (حالت گره) شود، همهٔ گره‌هایی که این تغییر اطلاعات روی آنها تأثیر دارد به لیست کار اضافه می‌شوند و این فرایند تا
دارد به لیست کار اضافه می‌شوند و این فرایند تا خالی شدن لیست کار ادامه خواهد داشت. شبه کد این الگوریتم مشابه زیر است:
نهان‌سازی در خط یک تکنیک بهینه سازی است که در زمان اجرا انجام می‌شود، و در ابتدا برای زبان اسمال‌تاک پیاده‌سازی شده است. هدف از نهان‌سازی در خط سرعت بخشیدن به یافتن تابع مورد نظر به وسیله ذخیره‌سازی نتایج جستجوی قبلی به طور مستقیم در نقطه فراخوانی است. نهان‌سازی در خط به طور خاص مورد استفاده زبان‌های گونه پویا است که بیشتر یا تمام جستجوی تابع‌های آن‌ها در زمان اجرا اتفاق می‌افتد. در این موارد جداول توابع مجازی معمولاً قابل استفاده نیست. شرح مشکل و راه‌حل ابتدایی. تابع اکما اسکریپت زیر یک شیء را به عنوان
ابتدایی. تابع اکما اسکریپت زیر یک شیء را به عنوان ورودی دریافت می‌کند، تابع toString را فراخوانی کرده و نتایج را در صفحه‌ای که اسکریپت در آن تعبیه شده است نشان می‌دهد. function dump(obj) { document.write(obj.toString()); از آنجایی که نوع شیء مشخص نشده است و احتمال استفاده از قابلیت وجود دارد، تصمیم‌گیری آن که در لحظه کدام تابع toString در اصل باید اجرا شود، غیر ممکن است. در عوض، یک جستجوی پویای تابع باید در زمان اجرا انجام شود. در زبان‌هایی که در زمان اجرا از نهان‌سازی استفاده نمی‌کنند، با هر بار رسیدن به
از نهان‌سازی استفاده نمی‌کنند، با هر بار رسیدن به نقطه فراخوانی، این جستجوی پویای تابع دوباره انجام می‌شود. از آنجا که ممکن است زنجیره وراثت وجود داشته باشد و توابع در کلاس پدرهای شیء پیاده‌سازی شده باشند، هر جستجوی پویای تابع می‌تواند یک عمل هزینه‌بر در زمان اجرا تلقی شود. برای دستیابی به عملکرد بهتر، بسیاری از زبان‌ها در زمان اجرا از نوعی نهان‌سازی غیر در خط (none_online) استفاده می‌کنند به این صورت که نتایج تعداد محدود و مشخصی از جستجوهای پویای تابع در ساختار داده‌ای مناسب ذخیره می‌شوند. این کار
در ساختار داده‌ای مناسب ذخیره می‌شوند. این کار می‌تواند عملکرد را مقدار خوبی بهبود ببخشد به شرطی که نهان‌سازی برای برنامه های اجرا شده به صرفه باشد (یعنی تعداد محدودی از توابع وجود داشته باشد که به طور مکرر مورد استفاده قرار بگیرد). این ساختار داده معمولاً به عنوان حافظه نهان جستجوی تابع سطح اول نامیده می‌شود. تعریف نهان‌سازی در خط و پیاده‌سازی اولیه. مفهوم نهان‌سازی در خط مبتنی بر این مشاهده تجربی است که اشیاء مورد استفاده در یک نقطه فراخوانی خاص معمولاً از یک نوع هستند. در این موارد ، با ذخیره کردن نتیجه
یک نوع هستند. در این موارد ، با ذخیره کردن نتیجه جستجوی تابع به صورت "در خط"، یعنی مستقیماً در نقطه فراخوانی، می‌توان عملکرد را مقدار خوبی بهبود بخشید. برای تسهیل این فرایند، به نقاط فراخوانی وضعیت‌های مختلفی اختصاص داده می‌شود. در ابتدا، به یک نقطه فراخوانی وضعیت "ناشناخته" نسبت داده می‌شود. هنگامی که اجرای برنامه به یک نقطه فراخوانی خاص با وضعیت ناشناخته رسید، یک جستجوی پویای تابع انجام می‌شود و نتیجه را در نقطه فراخوانی ذخیره می‌کند و وضعیت آن نقطه فراخوانی به "تک‌ریخت" تغییر پیدا می‌کند. اگر اجرای
به "تک‌ریخت" تغییر پیدا می‌کند. اگر اجرای برنامه دوباره به همان نقطه فراخوانی برسد، پذیرنده اصلی (تابع مقصد، تابعی که واقعاً باید اجرا شود و ممکن است در کلاس پدر شیء مورد نظر پیاده ساری شده باشد) را از آن بازیابی می‌کند و مستقیماً بدون انجام هرگونه جستجوی بیشتر، آن را فراخوانی می‌کند. برای آن که احتمال وجود انواع مختلفی از اشیاء در یک نقطه فراخوانی وجود دارد، زبان برنامه‌نویسی در زمان اجرا باید شرایط محافظت را درون کد وارد کند (چک کند که نوع شیءای که تابع آن فراخوانی شده با نوع قبلی و مورد انتظار آن برابر
فراخوانی شده با نوع قبلی و مورد انتظار آن برابر باشد). به طور معمول برای پیاده‌سازی این موارد از نقطه فراخوانی استفاده نمی‌شود و در بخشی به نام مقدمه پذیرنده (بخشی که پیش از اجرای تابع مقصد، فراخوانی می‌شود) قرار می‌گیرند تا بتوان از پیش‌بینی‌کننده پرش بهتری استفاده کرد. با این کار به جای چندبار کپی کردن در نقاط فراخوانی مختلف یک بار شرایط محافظت در مقدمه پذیرنده قرار می‌گیرد در نتیجه فضای کمتری اشغال می‌شود. اگر نقطه فراخوانی در وضعیت "تک‌ریخت" با نوع دیگری شیء، غیر از آنچه انتظار دارد مواجه شود، باید
شیء، غیر از آنچه انتظار دارد مواجه شود، باید مجدداً به حالت "ناشناخته" تغییر یابد و دوباره یک جستجوی پویای تابع انجام شود. پیاده‌سازی ابتدایی با استفاده از یک ثبات و یک دستورالعمل فراخوانی است. با رسیدن به نقطه فراخوانی، مقدار ثبات با آدرس شیءای که تابع را فراخوانده است بارگذاری می‌شود (در مثال بالا آدرس obj که تابع toString را فراخوانی کرده در ثبات قرار می‌گیرد) اگر نقطه فراخوانی در وضعیت ناشناخته باشد دستورالعملی اجرا می‌شود که با استفاده از حافظه نهان جستجوی تابع سطح اول که در بالا اشاره شد، تابع مقصد
تابع سطح اول که در بالا اشاره شد، تابع مقصد (پذیرنده) را پیدا می‌کند، سپس وضعیت نقطه فراخوانی به "تک‌ریخت" تغییر پیدا می‌کند. اگر نقطه فراخوانی در وضعیت "تک‌ریخت" باشد، در زمان اجرا دستورالعمل‌ها جای‌گذاری می‌شوند، به این صورت که فراخوانی یافتن تابع اصلی با فراخوانی مقدمه پذیرنده تعویض می‌شود (که پیش از این بوسیله جستجوی پویای تابع یافت شده بود). اکنون پیوند نقطه فراخوانی با تابع هدف (پذیرنده) ایجاده شده است. در مقدمه پذیرنده، شرایط محافظت نوشته شده است که در آن مطابقت نوع شیء فعلی (که در ثبات ذخیره شده)