Suche…


Überhaupt nichts: `... // 0`

Eines der elementarsten DCG-Nichtterminale ist ... //0 , was als "alles" gelesen werden kann:

... --> [] | [_], ... .

Es kann verwendet werden, um eine Liste Ls zu beschreiben, die das Element E enthält, über:

phrase(( ..., [E], ... ), Ls)

Parsen mit DCGs

DCGs können für die Analyse verwendet werden. Das Beste von allem ist, dass dieselbe DCG häufig zum Parsen und Generieren von Listen verwendet werden kann, die beschrieben werden. Zum Beispiel:

sentence --> article, subject, verb, object.

article --> [the].

subject --> [woman] | [man].

verb --> [likes] | [enjoys].

object --> [apples] | [oranges].

Beispielabfragen:

?- phrase(sentence, Ls).
Ls = [the, woman, likes, apples] ;
Ls = [the, woman, likes, oranges] ;
Ls = [the, woman, enjoys, apples] .

?- phrase(sentence, [the,man,likes,apples]).
true .

Zusätzliche Ziele

Zusätzliche Ziele ermöglichen das Hinzufügen von Verarbeitungen zu DCG-Klauseln, beispielsweise Bedingungen, die die Elemente der Liste erfüllen müssen.

Die zusätzlichen Ziele werden zwischen geschweiften Klammern am Ende einer DCG-Klausel beobachtet.

% DCG clause requiring an integer
int --> [X], {integer(X)}.

Verwendungszweck:

?- phrase(int, [3]).
true.

?- phrase(int, [a]).
false.

Zusätzliche Argumente

Die zusätzlichen Argumente fügen Ergebnisse zu den Vergleichselementen einer DCG-Klausel hinzu, indem sie den Ableitungsbaum dekorieren. Beispielsweise ist es möglich, eine algebraische Grammatik zu erstellen, die den Wert am Ende berechnet.

Angenommen, eine Grammatik, die den Zusatz Operation unterstützt:

% Extra arguments are passed between parenthesis after the name of the DCG clauses.
exp(C) --> int(A), [+], exp(B), {plus(A, B, C)}.
exp(X) --> int(X).
int(X) --> [X], {integer(X)}.

Das Ergebnis dieser Grammatik kann überprüft und abgefragt werden:

?- phrase(exp(X), [1,+,2,+,3]).
X = 6 ;


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow