【发布时间】:2020-09-27 05:10:05
【问题描述】:
我必须在 Prolog 中创建一个具有以下功能的 DCG:
- 处理主客体区分
- 单数/复数区别
- 能够生成解析树
- 使用单独的词典
这是给定的词典:
lex(the,det,_).
lex(a,det,singular).
lex(man,n,singular).
lex(men,n,plural).
lex(woman,n,singular).
lex(women,n,plural).
lex(apple,n,singular).
lex(apples,n,plural).
lex(pear,n,singular).
lex(pears,n,plural).
lex(eat,v,plural).
lex(eats,v,singular).
lex(know,v,plural).
lex(knows,v,singular).
lex(i,pronoun,singular,subject).
lex(we,pronoun,plural,subject).
lex(me,pronoun,singular,object).
lex(us,pronoun,plural,object).
lex(you,pronoun,_,_).
lex(he,pronoun,singular,subject).
lex(she,pronoun,singular,subject).
lex(him,pronoun,singular,object).
lex(her,pronoun,singular,object).
lex(they,pronoun,plural,subject).
lex(them,pronoun,plural,object).
lex(it,pronoun,singular,_).
这是我的代码:
s(s(NP,VP)) --> np(NP,X,subject), vp(VP,X).
np(np(DET,N),X,_) --> det(DET,X), n(N,X).
np(np(PRO),X,Y) --> pro(PRO,X,Y).
vp(vp(V,NP),X) --> v(V,X), np(NP,_,object).
vp(vp(V),X) --> v(V,X).
det(det(DET),X) --> [DET], {lex(DET,det,X)}.
n(n(N),X) --> [N], {lex(N,n,X)}.
pro(pro(PRO),X,Y) --> [PRO], {lex(PRO,pro,X,Y)}.
v(v(V),X) --> [V], {lex(V,v,X)}.
当我输入时:
s(X, [the, man, eats, the, apple], []).
我应该得到:
X = s(np(det(the, singular), n(man, singular, subject)), vp(v(eats, singular), np(det(the, singular), n(apple, singular, object))))
但是我得到了:
X = s(np(det(the), n(man)), vp(v(eats), np(det(the), n(apple))))
我不确定为什么它没有输出完整的东西。
【问题讨论】:
标签: parsing tree prolog grammar dcg