در علوم کامپیوتر، **تجزیه ایرلی** (به انگلیسی: Earley)، یک الگوریتم برای تجزیهٔ یک رشته است که متعلق به یک زبان مستقل از متن است

نام الگوریتم از وجود آورنده آن جی ایرلی گرفته شده، و این الگوریتم مبتنی‌بر برنامه‌نویسی پویا است. از این الگوریتم به‌طور عمده برای تجزیه در زبان‌شناسی محاسباتی استفاده می‌شود.

جذابیت تجزیه‌کننده‌های ایرلی در آن است که می‌توانند تجزیهٔ تمام زبان‌های مستقل از متن را نیز پشتیبانی کنند؛ این ویژگی در تجزیه‌کننده‌های LR ،LL که معمولاً بیشتر در کامپایلرها استفاده می‌شوند وجود ندارد و آن‌ها تنها می‌توانند کلاس‌های محدودی از زبان‌ها را پشتیبانی کنند.تجزیه ایرلی

در علوم کامپیوتریک تجزیه برای , یک الگوریتم برای تجزیه رشته است که متلق به یک زبان مستقل از متن در نظر گرفته شده‌است. هر چند بسته به نوع ممکن است با گرامرهای certain nullable grammar دچار مشکل شود.
یک الگوریتم بر اساس اسم تولیدکننده ی آن ,نام گذاری می‌شود.(JAY EARLEY)
این الگوریتم بر اساس نمودار برنامه‌نویسی پویاست به همین دلیل است که به‌طور عمده برای تجزیه در زبان‌شناسی محاسباتی استفاده می‌شود.
این الگوریتم را برای اولین بار در پایان‌نامه خود در سال 1968 معرفی کرد و پس از آن به صورت مختصر و خوانا تر در مجله به چاپ رسید.
تجزیه‌کننده ایرلی جذاب است زیرا :
آنها می‌توانند تجزیه تمام زبان‌های مستقل از متن , برخلاف تجزیه‌کننده‌های LL ,LR که معمولاً بیشتر در کامپایلرها استفاده می‌شوند را انجام می‌دهد.
این الگوریتم دارای پیچیدگی زمانی می‌باشد که در آن ,nطول رشته می‌باشد.
درجه ی دو این زمان برای گرامرهای بدون ابهام است و خطی آن برای تمام گرامرهای LR(k) استفاده می‌شود. این الگوریتم برای بازگشتی‌ها خیلی خوب عمل می‌کند.

الگوریتم بالا شناخت ایرلی را توضیح می‌دهد. این شناسنده به سادگی تغییر می یابد تا یک درخت پارسه به عنوان شناسنده, بسازد.
الگوریتم: 
بر اساس توضیحات بالا α, β, γ ,هر رشته در ترمینال یا غیر ترمینال(شامل رشته خالی) را ارائه می‌دهد.X,Yغیرترمینال و a ترمینال را نمایش می‌دهد.
این الگوریتم از بالا به پایین می‌باشد. ما با استفاده از نماد نقطه‌ای این عملیات را توصیف می کنیم:

```
X → α • β این نماد نشتن دهنده α پارس شده و β در انتظار است.
```

موقعیت ورودی 0 ,موقعیتی است که هنوز چیزی وترد نشده و موقعیت n برای پذیرفتن n امین ورودی است.
برای هر موقعیت ورودی پارسر یک state تعیین می‌کند.
هر state چندتایی (X → α • β, i)شامل:
ساختن به‌طور هم‌زمان (X → α β)
موقعیت فعلی (ارایه شده با نقطه)
موقعیتی که در آن تولید شروع می‌شود ,موقعیت مبدا
موقعیت i در ورودی کخ موقعیت مبدأ می گویند.
الگوریتم ایرلی شامل نگاه پیشرو در stateها است ولی پژوهش‌ها حاکی از آن است که بهرخ وری کمتری دارد و به همین دلیل پیاده‌سازی آن کاهش یافته‌است.
State ای که در جایگاه K تعیین می‌شود : S(K)
پارسری که با مقدار 0 مقدار دهی می‌شود در top قرار می‌گیرد.
پارسر به‌طور مکرراین 3 عملیات پیش‌بینی و اسکن و اتمام را تکرار می‌کند.
پیش بینی:
برای هر state در s(k) با فرم (X → α • Y β, j) که در اینجا j در موقعیت مبدأ است همانطور که در بالا گفته شد. و (Y → • γ, k) برای هر تولیدی در گرامرکه در آن y در سمت چپ قرار دارد.
اسکن:
اگر a سمبل بعدی از رشته باشد برای هر state در s(k) به شکل (X → α • a β, j)
.. (X → α a • β, j) را با S(k+1) جمع می کنیم.
اتمام:
برای هر state درs(k) با فرم (X → γ •, j)یک state در s(j) با فرم 

```
(Y → α • X β, i)  که  (Y → α X • β, i) را با S(k). جمع می کنیم.
```

این مهم است که state تکراری وارد مجموعه stateها نشود.
این سه عمل تا جایی تکرار مشود که state جدیدی وارد نشود.
این مجموعه به‌طور کلی به صفی ازstateهای برای اجرا می‌باشد.

شبه برنامه :

function EARLEY-PARSE(words, grammar)

```
   ENQUEUE((γ → •S, 0), chart[0])
   for i ← from 0 to LENGTH(words) do
       for each state in chart[i] do
           if INCOMPLETE?(state) then
               if NEXT-CAT(state) is a nonterminal then
                   PREDICTOR(state, i, grammar)         // non-terminal
               else do
                   SCANNER(state, i)                    // terminal
           else do
               COMPLETER(state, i)
       end
   end
   return chart
```

procedure PREDICTOR((A → α•B, i), j, grammar)

```
   for each (B → γ) in GRAMMAR-RULES-FOR(B, grammar) do
       ADD-TO-SET((B → •γ, j), chart[j])
   end
```

procedure SCANNER((A → α•B, i), j)

```
   if B ⊂ PARTS-OF-SPEECH(word[j]) then
       ADD-TO-SET((B → word[j], j), chart[j + 1])
   end
```

procedure COMPLETER((B → γ•, j), k)

```
   for each (A → α•Bβ, i) in chart[j] do
       ADD-TO-SET((A → αB•β, i), chart[k])
   end
```

مثال:

=  ~~# the start rule~~~~::=  ~~"+" <M> | <M>
<M> ::= <M> "\*" <T> | <T>
<T> ::= "1" | "2" | "3" | "4"~~~~

~~~~منابع
-----

1. ↑

| * ن
* ب
* و
الگوریتم‌های تجزیه‌کننده |
| --- |
| تحلیلگر بالا به پایین | 
* تجزیه‌کننده ال‌ال
* تجزیه‌کننده کاهشی بازگشتی
	+ تجزیه‌کننده بازگشتی دنباله
	+ Pratt parser

 |
| تجزیه از پایین به بالا | 
* Precedence
	+ تجزیه اولویت ساده
	+ تجزیه‌کننده عملگر اولویت
		- Shunting-yard
* Bounded-context
* تجزیه‌کننده ال‌آر
	+ تجزیه‌کننده ال‌آر ساده
	+ تجزیه‌کننده ال‌ای‌ال‌آر
	+ تجزیه‌کننده ال‌آر استاندارد
	+ تجزیه‌کننده جی‌ال‌آر
* الگوریتم سی وای کا
* Recursive ascent
* پارسر انتقال کاهش

 |
| Mixed, other | 
* ترکیب کننده تجزیه‌گر
* Chart
* تجزیه ایرلی

 |
| Related topics | 
* پارسنگ اکسپرشن گرامر
* گرامرهای عبارت قطعی
* برنامه‌نویسی پویا
* مموایز کردن
* کامپایلر-کامپایلر
	+ LALR
* کامپایلر-کامپایلر
* نمودار درختی تجزیه
* درخت نحو انتزاعی
* Scannerless parsing
* تاریخچه ساخت مترجم
* Comparison of parser generators

 |~~~~