W teorii jzyka The algorytm Earley jest algorytm do analizowania dla gramatyk bezkontekstowych opisany po raz pierwszy przez Jay Earley . Podobnie jak algorytmy CYK i GLR, algorytm Earleya oblicza wszystkie moliwe analizy zdania (a nie tylko jedn z tych analiz). Opiera si na programowaniu dynamicznym .
Moemy zbudowa parser Earleya dla dowolnej gramatyki niekontekstowej. Dziaa w czasie szeciennym ( O (n 3 ), gdzie n jest dugoci cigu wejciowego). Dla jednoznacznej gramatyki analiz Earleya przeprowadza si w czasie kwadratowym ( O (n 2 )).
Algorytm Earleya
Rozwa gramatyk niekontekstow, a take cig wejciowy o oznaczonej dugoci . Celem analizy przez algorytm Earleya jest rozpoznanie cigu, a wic stwierdzenie, czy cig jest czci jzyka generowanego przez gramatyk.


Przedmioty Earley i stoy Earley
Algorytm Earleya manipuluje przedmiotami Earleya , zwanymi prociej przedmiotami . Przedmiotem s dane:
- zasada tworzenia zapisanej gramatyki ;

- indeks pocztkowy w sowie wejciowym, taki jak ;


- indeks pozycji po prawej stronie linijki, reprezentowany przez kropk .
Reprezentujemy pozycj w postaci , gdzie .


Zasada algorytmu
Mamy tabel rozmiarów, w której przechowujemy zestawy elementów Earley, gdzie jest dugo cigu wejciowego.



Obliczenie rozpoczyna si od uwzgldnienia elementów postaci, gdzie jest aksjomatem gramatyki i jest regu produkcji. Element reprezentuje sytuacj, w której jeszcze niczego nie rozpoznalimy, ale staramy si rozpozna aksjomat od pocztku cigu wejciowego. Nastpnie wykonujemy krok 0, 1, ..., a do kroku n.
![{\ styl wywietlania T [0]}](https://wikimedia.org/api/rest_v1/media/math/render/svg/7923a1d682a1a78cf3456a6cdc5b3ae99c37fd31)




Celem tego kroku jest obliczenie, a nastpnie zapisanie w tabeli zestawu elementów, takich jak rozpoznawany przez .

![{\ displaystyle T [j]}](https://wikimedia.org/api/rest_v1/media/math/render/svg/cb1f9ca1ed801caf88d5004aa3685644667099b6)



W kroku obliczymy z tabel nasycajc kolejno nastpujce trzy operacje:

![{\ displaystyle T [j]}](https://wikimedia.org/api/rest_v1/media/math/render/svg/cb1f9ca1ed801caf88d5004aa3685644667099b6)
![{\ styl wywietlania T [0], \ kropki, T [j-1]}](https://wikimedia.org/api/rest_v1/media/math/render/svg/1e040fdb4987310971254d9acbf30f84fb125523)
-
Czytanie (skaner w jzyku angielskim). Operacja odczytu jest wykonywana dla . Do kadego elementu formularza dodajemy w pozycji . Innymi sowy, zwikszamy punkty w pozycjach, jeli poprzedza ona przeczytan liter .

![{\ displaystyle T [j-1]}](https://wikimedia.org/api/rest_v1/media/math/render/svg/ae2932028ce663e982145b354de8dbf1b7a4008d)

![{\ displaystyle T [j]}](https://wikimedia.org/api/rest_v1/media/math/render/svg/cb1f9ca1ed801caf88d5004aa3685644667099b6)

![{\ displaystyle T [j-1]}](https://wikimedia.org/api/rest_v1/media/math/render/svg/ae2932028ce663e982145b354de8dbf1b7a4008d)

-
Prognoza. Jeeli element formularza znajduje si w miejscu gdzie jest nieterminalem to dla wszystkich regu dodajemy element do zbioru . Innymi sowy, jeli trzeba rozpozna, testuje si wszystkie reguy, gdzie znajduje si w lewej czci.

![{\ displaystyle T [j]}](https://wikimedia.org/api/rest_v1/media/math/render/svg/cb1f9ca1ed801caf88d5004aa3685644667099b6)



![{\ displaystyle T [j]}](https://wikimedia.org/api/rest_v1/media/math/render/svg/cb1f9ca1ed801caf88d5004aa3685644667099b6)

-
Zakoczenie . Jeli element formularza jest , to dla wszystkich pozycji w tabeli formularza , dodajemy w . Innymi sowy, jeli rozpoznamy , rozwijamy zasady, które czekay na uznanie .

![{\ displaystyle T [j]}](https://wikimedia.org/api/rest_v1/media/math/render/svg/cb1f9ca1ed801caf88d5004aa3685644667099b6)
![T [i]](https://wikimedia.org/api/rest_v1/media/math/render/svg/aad46e2c555641e382521acf8f0a263ab284bb89)


![{\ displaystyle T [j]}](https://wikimedia.org/api/rest_v1/media/math/render/svg/cb1f9ca1ed801caf88d5004aa3685644667099b6)



Analiza powiedzie si, jeli w tabeli znajduje si pozycja formularza , gdzie jest produkcja.
![{\ styl wywietlania T [n]}](https://wikimedia.org/api/rest_v1/media/math/render/svg/01b49d667599f67e3b86edbd593888f54b54b4b6)


Przykad
Rozwa nastpujc gramatyk wyrae arytmetycznych:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
jest aksjomatem gramatyki.
Przeanalizujmy cig wejciowy . Nastpnie otrzymujemy nastpujce tabele: Oznaczymy "P:" operacj przewidywania; "C:" operacja uzupeniania, a "L:" operacja odczytu.

W kroku 0 obliczenia rozpoczynaj si od . Nastpnie nasycamy operacj przewidywania.

|
|
|
|
|
P:
|
|
|
|
P:
|
|
|
|
P:
|
|
|
|
P:
|
|
|
|
P:
|
|
|
|
P:
|
|
|
|
P:
|
|
|
|
P:
|
|
|
|
P:
|
|
|
|
P:
|
|
|
|
|
W kroku 1 otrzymujemy operacj odczytu. Operacja przewidywania nie daje niczego, poniewa indeks pozycji znajduje si na kocu prawej czci. Element jest uywany przez operacj uzupeniania w celu pobrania , then itd. a do nasycenia operacji zakoczenia.




|
L:
|
|
|
|
VS:
|
|
|
|
VS:
|
|
|
|
VS:
|
|
|
|
VS:
|
|
|
|
VS:
|
|
|
|
VS:
|
|
|
|
VS:
|
|
|
|
|
W kroku 2 otrzymujemy operacj odczytu. Podobnie jak tu po indeksie pozycji w pierwszym wierszu , dodajemy wszystkie reguy przewidywania , z indeksem 2, który jest indeksem biecej pozycji.


![{\ styl wywietlania T [2]}](https://wikimedia.org/api/rest_v1/media/math/render/svg/ceb71c046014ccc34f5e0f7b10fbbfa1e03347d5)

|
L:
|
|
|
|
P:
|
|
|
|
P:
|
|
|
|
P:
|
|
|
|
P:
|
|
|
|
P:
|
|
|
|
P:
|
|
|
|
P:
|
|
|
|
|
W kroku 3 czytamy , wic uzupeniamy de en . Jest wic regua, wic regua jest zakoczona w .


![{\ styl wywietlania T [2]}](https://wikimedia.org/api/rest_v1/media/math/render/svg/ceb71c046014ccc34f5e0f7b10fbbfa1e03347d5)




Nasycamy przez dopenienie.
|
L:
|
|
|
|
VS:
|
|
|
|
VS:
|
|
|
|
VS:
|
|
|
|
VS:
|
|
|
|
VS:
|
|
|
|
VS:
|
|
|
|
VS:
|
|
|
|
|
Tak jak w , sowo wejciowe jest rozpoznawane.

![{\ displaystyle T [3]}](https://wikimedia.org/api/rest_v1/media/math/render/svg/7d86ca0f2f633017d10b6f085e1ebfb69b97d5b7)
Zoono
Zoono przestrzeni
Niech bdzie liczb odrbnych elementów z wyjtkiem pocztkowego indeksu. Mona to zwikszy za pomoc rozmiaru gramatyki: dla kadego elementu gramatyki indeks pozycji moe mie skoczon liczb miejsc, a dla kadej z tych pozycji otrzymujemy inny element. Otrzymujemy , liczc te przedmioty. W praktyce sprowadza si to do policzenia liczby moliwych lokalizacji symbolu w reguach produkcji gramatyki. W poprzednim przykadzie mamy zatem .




W tabeli kady z elementów moe pojawi si z indeksem pocztkowym midzy a . W zwizku z tym istnieje co najwyej elementy w tabeli ograniczone gdzie jest rozmiar sowa wejciowego. Dodajc do od do , otrzymujemy co najwyej elementy w tabelach. Zoono w przestrzeni jest zatem w O (n²).
![{\ displaystyle T [j]}](https://wikimedia.org/api/rest_v1/media/math/render/svg/cb1f9ca1ed801caf88d5004aa3685644667099b6)




![{\ displaystyle T [j] .j}](https://wikimedia.org/api/rest_v1/media/math/render/svg/b1ff318cfb3c23481fd653fe5d7b419743c991e9)







Zoono czasowa (przypadek ogólny)
Przestudiujmy zoono operacji odczytu, przewidywania i uzupeniania na tablicy :
![{\ displaystyle T [j]}](https://wikimedia.org/api/rest_v1/media/math/render/svg/cb1f9ca1ed801caf88d5004aa3685644667099b6)
Czytanie analizuje elementy kadego w staym czasie. Biorc pod uwag rozmiar , operacja odczytu jest wykonywana w . Przewidywanie dziaa na kadym z elementów ju obecnych w staym czasie. Po przeczytaniu liczba obecnych elementów jest w , wic przewidywanie jest w . Uzupenianie dziaa na kadym elemencie obecnym w czasie w zalenoci od rozmiaru tablicy, do której odnosi si jego indeks pocztkowy. W najgorszym przypadku moemy ograniczy si do pojedynczego skanowania kadej z poprzednich tabel, co daje zoono w O (j²).
![{\ displaystyle T [j-1]}](https://wikimedia.org/api/rest_v1/media/math/render/svg/ae2932028ce663e982145b354de8dbf1b7a4008d)
![{\ displaystyle T [j-1]}](https://wikimedia.org/api/rest_v1/media/math/render/svg/ae2932028ce663e982145b354de8dbf1b7a4008d)



Sumujc te zoonoci na tablicach, otrzymujemy ostateczn zoono czasow w O (n 3 ).

Zoono czasowa (jednoznaczna gramatyka)
Tym, co umiecio zoono w O (n 3 ), bya czynno dopenienia. Jeli jednak gramatyka jest jednoznaczna, istnieje tylko jeden sposób uzyskania kadego elementu, a rozmiar tablicy po zakoczeniu wynosi . Tak wic kady z tych elementów mona byo uzyska tylko w czasie . Nastpnie otrzymujemy sumujc zoono czasow w O (n²).
![{\ displaystyle T [j]}](https://wikimedia.org/api/rest_v1/media/math/render/svg/cb1f9ca1ed801caf88d5004aa3685644667099b6)


Wariant
Analiz Earleya mona przeprowadzi za pomoc ukierunkowanego wykresu acyklicznego jako danych wejciowych, a nie cigu. Umoliwia to wprowadzanie kilku sów w bardziej zwizy sposób, a take analizowanie kilku sów jednoczenie, dziki czemu jest bardziej wydajne. Indeksy tabel s wic indeksami odpowiadajcymi topologicznemu sortowaniu grafu. Co wicej, dla wza o indeksie j, operacja odczytu ju nie uywa, ale gdzie k jest indeksem wza rodzica badanego wza.
![{\ displaystyle T [j-1]}](https://wikimedia.org/api/rest_v1/media/math/render/svg/ae2932028ce663e982145b354de8dbf1b7a4008d)
![{\ styl wywietlania T [k]}](https://wikimedia.org/api/rest_v1/media/math/render/svg/846452de4084299705e8c3974e3f257c36907e0e)
Uwagi i referencje