Ist adaptives Parsen in Prolog möglich?

8

Ich versuche, einen adaptiven Parser in Prolog: Mit anderen Worten, ein Parser, der zur Laufzeit seine eigenen Parsing-Regeln ändern kann.

Um dies zu tun, muss ich zur Laufzeit neue Prädikate generieren, aber ich bin mir nicht sicher, ob dies möglich ist. Wäre es möglich, ein Prädikat zu schreiben, das eine Liste wie diese annimmt:

%Vor%

... und erzeugt dann ein neues Prädikat wie dieses?

%Vor%     
Anderson Green 24.04.2016, 00:06
quelle

2 Antworten

6

Ja , das ist einfach möglich.

Prolog ist eine sehr dynamische Sprache, und Sie können zur Laufzeit beliebige Klauseln verwenden, zum Beispiel mit assertz/1 .

Sie können DCG-Regeln auf normale Prolog-Regeln erweitern, indem Sie den Prolog-Termexpansionsmechanismus verwenden, der normalerweise dafür verwendet wird.

Zum Beispiel mit expand_term/2 :

%Vor%

Sie können solche Klauseln mit assertz/1 :

geltend machen %Vor%

Beachten Sie, dass ich in diesem Beispiel double_quotes auf chars festgelegt habe, d. h. verwende:

%Vor%

in Ihren Quelldateien. Das ist auf jeden Fall eine gute Idee.

Beachten Sie auch, dass ich davon ausgehe, dass Sie bereits eine Möglichkeit gefunden haben, die Listen, die Sie in Ihrem generate_dcg_rule/1 -Beispiel angeben, in tatsächliche DCGs zu übersetzen. Für diese Übersetzung empfehle ich eher ein Prädikat wie list_dcg/2 , das deklarativ die Relation zwischen solchen Listen und DCG-Regeln beschreibt. Der Vorteil liegt auf der Hand: Sie können solche Beziehungen beispielsweise testen interaktiv und mit Testfällen usw. Für Ihr konkretes Beispiel könnte eine Klausel, die diese Beziehung definiert, ähnlich sein:

%Vor%

Ich verlasse das auf Ihre anderen Anwendungsfälle als Übung. Eine Möglichkeit, solche Klauseln dynamisch zu setzen, lautet also:

%Vor%

Beachten Sie, wie wir von Prologs homoikonischer Natur in solchen Beispielen profitieren: Prolog-Regeln und DCG-Regeln haben eine natürliche Darstellung als Prolog Begriffe und wir können sie einfach aufschreiben und über sie wie alle anderen Begriffe auch innerhalb von Zielen nachdenken.

    
mat 24.04.2016, 01:07
quelle
2

Ich habe einen adaptiven Parser geschrieben, der englische Phrasen in mathematische Ausdrücke umwandelt. Sie können es leicht mit Ihren eigenen Übersetzungsregeln erweitern, sodass es zum Erstellen erweiterbarer Benutzeroberflächen in natürlicher Sprache verwendet werden kann.

Dies ist eine mögliche Eingabe:

%Vor%

und das ist seine Ausgabe:

%Vor%

Die Implementierung des Programms wird hier gezeigt:

%Vor%     
Anderson Green 11.06.2016 05:15
quelle

Tags und Links