زنجیره استفاده-تعریف
زنجیره استفاده-تعریف یک ساختمان داده است که متشکل از استفاده یک متغیر و همه‌ی تعریف‌هایی از آن متغیر است که می‌تواند به آن استفاده بدون مداخله تعریف دیگری برسد. به طور کلی زنجیره استفاده-تعریف به معنی انتساب چند مقدار به یک متغیر است. همتای زنجیره استفاده-تعریف ، زنجیره‌ی تعریف-استفاده است که تشکیل شده‌است از یک تعریف یک متغیر و همه‌ی استفاده‌های آن که قابل دسترسی از آن استفاده بدون مداخله تعریف دیگری است. هر دوی زنجیره‌ی استفاده-تعریف و زنجیره‌ی تعریف-استفاده از یک فرم آنالیز ایستای برنامه به نام آنالیز جریان داده تشکیل شده‌اند. دانستن زنجیره‌های استفاده-تعریف و تعریف-استفاده برای یک برنامه یا زیربرنامه یک پیش‌نیاز برای چند بهینه‌سازی کامپایلر از جمله درهم کردن ثابت و حذف عبارت‌های مشترک است. درست کردن زنجیره‌ی استفاده-تعریف یا تعریف-استفاده یک گام برای تحلیل متغیر زنده است، که باعث می‌شود نمایش منطقی همه‌ی متغیرها شناخته‌شود و در کد ردیابی شود. تکه کد زیر را در نظر بگیرید: codice_1 که همانطور که در کد مشخص است متغیر x سه بار مقداردهی شده‌است.(در نقاط A, B, C) با این که در نقطه‌ای که با "1" مشخص شده‌است زنجیره‌ی استفاده-تعریف برای x باید مشخص کند که مقدار حاضر این متغیر باید از خط B بیاید (و مقدار x در خط B باید از خط A بیاید) اما در نقطه‌ای که با "2" مشخص شده‌است زنجیره‌ی استفاده-تعریف برای x نشان می‌دهد که مقدار حال حاضر این متغیر از C آمده‌است. به دلیل این که مقدار متغیر x در بلاک 2 به هیچ تعریفی از بلاک 1(یا قبل‌تر از آن) بستگی ندارد x ممکن است در آن‌جا متغیری دیگر باشد. در عمل می‌توان گفت یک متغیر دیگر است که ما آن را x2 می‌نامیم.
codice_2 فرایند تقسیم x به دو متغیر جدا را تقسیم دامنه‌ی زنده می‌نامند. همچنین فرم تخصیص ایستای منفرد را نیز ببینید. لیست گزاره‌ها ترتیب مشخصی از گزاره‌ها ارائه می‌دهد. برای یک متغیر مانند "v" تعریف اولیه آن با "V" شناخته می‌شود و برای اختصار تعریف اولیه به شکل s(0) معرفی می‌شود. و البته به طور کلی تعریف اولیه یک متغیر می‌تواند خارج از محدوده انجام شود.(مثال: متغیرهای گلوبال)
وقتی متغیر "v" در سمت چپ گزاره، مانند s(j) قرار دارد. آن‌گاه s(j) تعریف "v" خواهد شد. هر متغیر "v" حداقل یک تعریف از تعریف اولیه "V"(یا شروع برنامه) دارد.
اگر متغیر "v" در سمت راست گزاره s(j) باشد. آنگاه یک گزاره s(i) با i برای یافتن تمام زنجیره‌های تعریف-استفاده مربوط به متغیر d، مراحل زیر انجام دهید: این مراحل را به این شکل تکرار کنید: هر گزاره که در آن خواندن صورت گرفته را با هر گزاره‌ای که در آن نوشتن صورت گرفته ترکیب کنید. (با در نظر گرفتن تغییر مقدار متغیر) نتیجه باید به شکل مقابل باشد: codice_3 باید در صورت تغییر مقدار متغیر، اقدام‌های لازم را انجام دهید. برای مثال، از خط ۷ الی ۱۳ در برنامه نوشته شده، متغیر d دوباره تعریف نشده و مقدار آن نیز عوض نشده‌است. در خط ۱۴، این متغیر دوباره مقداردهی شده‌است و ممکن است مقدار جدیدی پیدا بکند. به همین دلیل شما باید این گزاره را با همه گزاره‌های خواندن از d که ممکن است پس از این گزاره اجرا شوند ترکیب کنید و به زنجیره اضافه کنید. در مثال ما، فقط خطوط ۱۰ به بعد امکان اجرا پس از خط ۱۴ را دارند و برای مثال خط ۷ هیچگاه دوباره اجرا نخواهد شد. برای فهم بهتر می‌توانید دو متغیر متفاوت به نام‌های d1 , d2 را تصور کنید و زنجیره آن‌ها را به این شکل محاسبه کنید: codice_4 در نتیجه می‌توانید چیزی شبیه برنامه زیر داشته باشید. متغیر d1 می‌تواند با متغیر b جابجا شود. codice_5  a) همه تعریف‌های زنده‌ای که در گزاره s(i) استفاده شده‌اند را پیدا کنید.
b) ارتباطات بین استفاده ها و تعریف ها را ایجاد کنید.
با این الگوریتم دو چیز به دست می‌آیند: