下面我有一个应该接受字符串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].
答案 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].