0

这是一些代表树的语法

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

其中括号中的*均值leaf和几棵树描述了儿子是括号中的树的根。我必须将该语法重写为 dcg 并添加语义操作,这将创建该树的抽象树leaf/0以及任何想法或来源的node/2示例node(node(leaf,leaf),node(leaf,leaf)) ,我将不胜感激。

4

1 回答 1

1

这适用于我的 SWI-Prolog:

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

为了解析字符串,您需要调用phrase谓词,例如:

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

Prolog 将把 X 与来自字符串的树的抽象表示统一起来。

于 2012-04-01T20:36:13.110 回答