2012-04-01 9 views
0

Hier schaffen, ist einige gramma Wich BaumDCG (wieder) abstrac Baum in semantischen Aktionen

<tree> -> * 
<tree> -> (<tree><tree>) 

wo * bedeutet leaf und ein paar Bäume in Klammern beschreibt Wurzel, die Söhne sind Bäume in Klammern steht. Ich muss dieses Gramm in dcg umschreiben und semantische Aktionen hinzufügen, die abstrac Baum dieses Baumes mit leaf/0 und node/2 Beispiel node(node(leaf,leaf),node(leaf,leaf)) für jede Idee oder Quelle ich werde dankbar sein.

Antwort

1

Dies funktioniert in meinem SWI-Prolog:

leaf_rule(leaf) --> "*". 
tree_rule(X) --> leaf_rule(X), !. 
tree_rule(node(X,Y)) --> "(", tree_rule(X), tree_rule(Y), ")". 

Um eine Zeichenfolge, die Sie phrase Prädikat aufrufen müssen zu analysieren, zum Beispiel:

phrase(tree_rule(X), "((**)*)", Rest). 

Prolog X mit abstrakten Darstellung vereinigen wird von Baum von der Schnur.

+0

Keine Notwendigkeit für den Schnitt! Und keine Notwendigkeit für leaf_rule // 1. – false

+0

cut macht es deterministisch, aber ja Leaf-Regel ist nicht notwendig, aber semantische Aktionen sind in {}, das ist nur zusätzliche Logik-Variable, die am Ende uniy wird – whd