Earley parser

In der Informatik ist der Earley parser ein Algorithmus, um Schnuren grammatisch zu analysieren, die einer gegebenen Sprache ohne Zusammenhänge, genannt nach seinem Erfinder, Jay Earley gehören. Der Algorithmus ist eine Karte parser, der dynamische Programmierung verwendet und hauptsächlich verwendet wird, um in der linguistischen Datenverarbeitung grammatisch zu analysieren.

Earley parsers appellieren, weil sie alle Sprachen ohne Zusammenhänge, verschieden von LR parsers und LL parsers grammatisch analysieren können, die mehr normalerweise in Bearbeitern verwendet werden, aber der nur eingeschränkte Klassen von Sprachen behandeln kann. Earley parser führt in der Kubikzeit mit dem allgemeinen Fall durch, wo n die Länge der grammatisch analysierten Schnur, quadratische Zeit für eindeutige Grammatiken, und geradlinige Zeit für fast den ganzen LR (k) Grammatiken ist. Es leistet besonders gut, wenn die Regeln nach links rekursiv geschrieben werden.

Der Algorithmus

In den folgenden Beschreibungen vertreten α, β, und γ jede Reihe von Terminals/Nichtterminals (einschließlich der leeren Schnur), X, und Y vertreten einzelne Nichtterminals und ein Vertreten eines Endsymbols.

Der Algorithmus von Earley ist ein verfeinernder dynamischer Programmieralgorithmus. Im folgenden verwenden wir die Punktnotation von Earley: in Anbetracht einer Produktion X  αβ, die Notation X  α · β vertritt eine Bedingung, in der α bereits grammatisch analysiert worden ist und β erwartet wird.

Für jede Eingangsposition (der eine Position zwischen Jetons vertritt) erzeugt der parser einen bestellten Zustandsatz. Jeder Staat ist ein Tupel (X  α · β, i) aus bestehend

  • die Produktion, die zurzeit (X  α β) wird vergleicht
  • unsere aktuelle Position in dieser Produktion (vertreten durch den Punkt)
  • die Position i im Eingang, an dem das Zusammenbringen dieser Produktion begonnen hat: die Ursprung-Position

(Der ursprüngliche Algorithmus von Earley hat einen Blick vorn in den Staat eingeschlossen; spätere Forschung hat das gezeigt, um wenig praktische Wirkung auf die Syntaxanalyse-Leistungsfähigkeit zu haben, und es ist nachher von den meisten Durchführungen fallen gelassen gewesen.)

Der Zustandsatz an der Eingangsposition k wird S (k) genannt. Der parser wird mit S (0) entsamt, aus nur der Regel auf höchster Ebene bestehend. Der parser funktioniert dann wiederholend in drei Stufen: Vorhersage, Abtastung und Vollziehung.

  • Vorhersage: Für jeden Staat in S (k) der Form (X  α · Y β, j) (wo j die Ursprung-Position als oben ist), tragen Sie bei (Y  · γ, k) zu S (k) für jede Produktion in der Grammatik mit Y auf der linken Seite (Y  γ).
  • Abtastung: Wenn des folgenden Symbols im Eingangsstrom, für jeden Staat in S (k) der Form (X  α zu sein · ein β tragen j) bei (X  α a · β, j) zu S (k+1).
  • Vollziehung: Für jeden Staat in S (k) der Form (X  γ ·, finden Sie j) Staaten in S (j) der Form (Y  α · X β, i) und tragen bei (Y  α X · β, i) zu S (k).

Diese Schritte werden wiederholt, bis keine Staaten mehr zum Satz hinzugefügt werden können. Der Satz wird allgemein als eine Warteschlange von Staaten durchgeführt, um in einer Prozession zu gehen (obwohl ein gegebener Staat in einem Platz erscheinen muss nur), und das Durchführen der entsprechenden Operation je nachdem, welcher Staat es ist.

Pseudocode

Angepasst aus der Rede und Sprache, die durch Daniel Jurafsky und James H. Martin in einer Prozession geht

fungieren Sie EARLEY-SYNTAXANALYSE (Wörter, Grammatik)

REIHEN SIE EIN ((γ  · S, 0), Karte [0])

weil ich  von 0 bis LÄNGE (Wörter) tue

für jeden Staat in der Karte tue [ich]

wenn UNVOLLSTÄNDIG? (Staat) dann

wenn FOLGENDES COMPUTERUNTERSTÜTZTES TESTEN (Staat) ein Nichtterminal dann ist

PROPHET (Staat, ich, Grammatik)//Nichtterminal

tun Sie sonst

SCANNER (Staat, i)//Terminal

tun Sie sonst

COMPLETER (Staat, ich)

Ende

Ende

geben Sie Karte zurück

Verfahren-PROPHET ((Ein  α\· B, i), j, Grammatik),

für jeden (B  γ) in "GRAMMATIK-REGELN FÜR" (B, Grammatik) tun

TRAGEN SIE ZU DEM SATZ BEI ((B  · γ, j), Karte [j])

Ende

Verfahren SCANNER ((Ein  α\· B, i), j),

wenn B  WORTARTEN (Wort [j]) dann

TRAGEN SIE ZU DEM SATZ BEI ((B  Wort [j], i), Karte [j + 1])

Ende

Verfahren COMPLETER ((B  γ\· j), k),

für jeden (Ein  α\· Bβ, i) in der Karte [j] tun

TRAGEN SIE ZU DEM SATZ BEI ((Ein  αB · β, i), Karte [k])

Ende

</syntaxhighlight>

Beispiel

Denken Sie die folgende einfache Grammatik für arithmetische Ausdrücke:

:: = S # die Anfang-Regel

</syntaxhighlight>

Mit dem Eingang:

2 + 3 * 4

Das ist die Folge von Zustandsätzen:

(setzen Sie nein fest.) Produktion (Ursprung) # Anmerkung

-----------------------------------------

S (0):· 2 + 3 * 4

(1) P  · S (0) # Anfang herrschen

über

(2) S  · S + M (0) # sagen von (1) voraus

(3) S  · M (0) # sagt von (1) voraus

(4) M  · M * T (0) # sagt von (3) voraus

(5) M  · T (0) # sagen von (3) voraus

(6) T  · Nummer (0) # sagt von (5) voraus

S (1): 2 · + 3 * 4

(1) T  Zahl · (0) # scannen von S (0) (6)

(2) M  T · (0) # vollenden von (1) und S (0) (5)

(3) M  M · * T (0) # vollenden von (2) und S (0) (4)

(4) S  M · (0) # vollenden von (2) und S (0) (3)

(5) S  S · + M (0) # vollenden von (4) und S (0) (2)

(6) P  S · (0) # vollenden von (4) und S (0) (1)

S (2): 2 + · 3 * 4

(1) S  S + · M (0) # scannt von S (1) (5)

(2) M  · M * T (2) # sagt von (1) voraus

(3) M  · T (2) # sagen von (1) voraus

(4) T  · Nummer (2) # sagt von (3) voraus

S (3): 2 + 3 · * 4

(1) T  Zahl · (2) # scannen von S (2) (4)

(2) M  T · (2) # vollenden von (1) und S (2) (3)

(3) M  M · * T (2) # vollenden von (2) und S (2) (2)

(4) S  S + M · (0) # vollenden von (2) und S (2) (1)

(5) S  S · + M (0) # vollenden von (4) und S (0) (2) (6) P  S · (0) # vollenden von (4) und S (0) (1)

S (4): 2 + 3 * · 4

(1) M  M * · T (2) # scannen von S (3) (3)

(2) T  · Nummer (4) # sagt von (1) voraus

S (5): 2 + 3 * 4 ·

(1) T  Zahl · (4) # scannen von S (4) (2)

(2) M  M * T · (2) # vollenden von (1) und S (4) (1)

(3) M  M · * T (2) # vollenden von (2) und S (2) (2) (4) S  S + M · (0) # vollenden von (2) und S (2) (1) (5) S  S · + M (0) # vollenden von (4) und S (0) (2) (6) P  S · (0) # vollenden von (4) und S (0) (1)

Der Staat (P  S ·, 0) vertritt eine vollendete Syntaxanalyse. Dieser Staat erscheint auch in S (3) und S (1), die sind, vollenden Sätze.

Siehe auch

...

Links

C Durchführungen

Javanische Durchführungen

Perl Durchführungen

Pythonschlange-Durchführungen

  • Charty eine Pythonschlange-Durchführung von Earley parser.
  • NLTK ein Pythonschlange-Werkzeug, das Earley parser hat.
  • Befeuern Sie einen Gegenstand Orientiertes "kleines Sprachfachwerk" für die Pythonschlange, die Earley parser durchführt.
  • earley3.py Eine eigenständige Durchführung des Algorithmus in weniger als 150 Linien des Codes, einschließlich der Generation des Syntaxanalyse-Waldes und der Proben.

Allgemeine Lispeln-Durchführungen

  • CL-EARLEY-PARSER Eine Allgemeine Lispeln-Bibliothek, die Earley parser durchführt.

Durchführungen des Schemas/Schlägers

Mittel


Erasmus Alberus / Äthiopische Kochkunst
Impressum & Datenschutz