DCG (снова) создание дерева абстракций в семантических действиях - PullRequest
0 голосов
/ 02 апреля 2012

Вот некоторая грамматика, которая представляет дерево

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

где * означает leaf, а пара деревьев в скобках описывает корень, что сыновья - это деревья в скобках. Мне нужно переписать эту грамматику в dcg и добавить семантические действия, которые создадут абстракционное дерево этого дерева с leaf/0 и node/2 примером node(node(leaf,leaf),node(leaf,leaf)) за любую идею или источник я буду благодарен.

1 Ответ

1 голос
/ 02 апреля 2012

Это работает в моем SWI-прологе:

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).

Пролог объединитX с абстрактным представлением дерева из строки.

...