Parsing 定冠词语法-Prolog
下面我有一个明确的子句语法,它应该接受字符串Parsing 定冠词语法-Prolog,parsing,prolog,dcg,Parsing,Prolog,Dcg,下面我有一个明确的子句语法,它应该接受字符串aabccc,但是当我测试语法时,我能接受的唯一字符串是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].
aabccc
,但是当我测试语法时,我能接受的唯一字符串是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].
两个版本的语法都能正常工作:
?- phrase(s, [a,a,b,b,c,c,c], R).
R = [] .
?- phrase(s, [a,a,b,b,c,c,c]).
true .
可能问题在于,您试图调用它的不是a[a,a,b,b,c,c]
令牌列表,而是aaabccc
atom?如果是这种情况,您可以使用标准的atom\u chars/2
内置谓词将atom转换为字符列表:
?- atom_chars(aabccc, Tokens).
Tokens = [a, a, b, c, c, c].
以上语法有效。我只需要重新编译它。谢谢:)