Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
这是一些代表树的语法
<tree> -> * <tree> -> (<tree><tree>)
其中括号中的*均值leaf和几棵树描述了儿子是括号中的树的根。我必须将该语法重写为 dcg 并添加语义操作,这将创建该树的抽象树leaf/0以及任何想法或来源的node/2示例node(node(leaf,leaf),node(leaf,leaf)) ,我将不胜感激。
*
leaf
leaf/0
node/2
node(node(leaf,leaf),node(leaf,leaf))
这适用于我的 SWI-Prolog:
leaf_rule(leaf) --> "*". tree_rule(X) --> leaf_rule(X), !. tree_rule(node(X,Y)) --> "(", tree_rule(X), tree_rule(Y), ")".
为了解析字符串,您需要调用phrase谓词,例如:
phrase
phrase(tree_rule(X), "((**)*)", Rest).
Prolog 将把 X 与来自字符串的树的抽象表示统一起来。