Prolog中逻辑语句的DCG解析器

Prolog中逻辑语句的DCG解析器,prolog,dcg,Prolog,Dcg,鉴于以下语法: BoolExpr ::= BoolConj { "or" BoolConj }. BoolConj ::= BoolLit { "and" BoolLit }. BoolLit ::= [ "not" ] BoolPosLit. BoolPosLit ::= "true"| "false"| "(" BoolExpr ")". 我想为上面的语法编写一个DCG解析器。解析器只需接受(成功)或拒绝(失败)给定的输入 以下是我所拥有的: boolepxr([or(O)|Bool

鉴于以下语法:

BoolExpr ::= BoolConj { "or" BoolConj }.
BoolConj ::= BoolLit { "and" BoolLit }.
BoolLit ::= [ "not" ] BoolPosLit.
BoolPosLit ::= "true"|  "false"|  "(" BoolExpr ")".
我想为上面的语法编写一个DCG解析器。解析器只需接受(成功)或拒绝(失败)给定的输入

以下是我所拥有的:

 boolepxr([or(O)|BoolExpr]) -->
    ['or'],
    boolconj(O),
    boolexpr(BoolExpr).

boolconj([and(A)|BoolConj]) -->
    ['and'],
    boollit(A),
    boolconj(BoolConj).

boollit([not(N)|BoolLit]) -->
    ['not'],
    boolps(N).

boolps([true(B)|BoolPs]) -->
    ['true'],
    boolexpr(B),
    boolps(BoolPS).

 boolps([false(B)|BoolPs]) -->
    ['false'],
    boolexpr(B),
    boolps(BoolPS).
但是,当我运行这个程序时,我没有得到适当的输出。

因为DCG必须只识别输入,所以我简化了:

boolexpr --> boolconj, [or], boolexpr.
boolexpr --> boolconj.

boolconj --> boollit, [and], boolconj.
boolconj --> boollit.

boollit --> [not], boolps.
boollit --> boolps.

boolps --> [true].
boolps --> [false].
boolps --> ['('], boolexpr, [')'].
屈服

?- phrase(boolexpr, [true,or,false,and,not,true]).
true ;
false.

你用什么做的?你期望的产出是什么?