确定条款语法 - Prolog

时间:2014-11-11 18:17:48

标签: parsing prolog dcg

下面我有一个应该接受字符串aabccc的Definite Clause Grammar,但是当我测试语法时,我能够接受的唯一字符串是abc

我很确定我已经摆脱了左手递归,所以我不确定出了什么问题。

s --> x, y, z.
x --> [a], x.
x --> [a].
y --> [b], y.
y --> [b]. 
z --> [c], z.
z --> [c].

另外,我能否将上述语法定义为......

s --> x, y, z.
x --> [a], x; [a].
y --> [b], y; [b].
z --> [c], z; [c].

1 个答案:

答案 0 :(得分:3)

你的语法版本都按预期工作:

?- phrase(s, [a,a,b,b,c,c,c], R).
R = [] .

?- phrase(s, [a,a,b,b,c,c,c]).
true .

也许问题是你试图用它来调用它。一个[a,a,b,b,c,c,c]令牌列表,但带有aabccc个原子?如果是这种情况,您可以使用标准atom_chars/2内置谓词将原子转换为字符列表:

?- atom_chars(aabccc, Tokens).
Tokens = [a, a, b, c, c, c].