考虑我想查询一个电影数据库,其中NL查询是“给我看所有电影主演<在这里插入演员姓名>”。
我不想为每个可能的演员创建制作。我可以建立语法来处理“给我看所有电影主演”,但是我怎么可能处理演员有任何可能价值的“外卡”问题,所以我可以从右侧获取任何值并传播它向左然后向上?
作为范围更为有限的更简单的例子,关于电影的评级,我得到了NNP(处理PG,R等的评级值),但是我说我不想硬编码评级,这对于想要处理特定电影或演员名称时尤其重要。
% start S
S[SEM=(?vp + ?np)] -> VP[SEM=?vp] NP[SEM=?np]
VP[SEM=(?vb)] -> VB[SEM=?vb]
NP[SEM=(?nns + ?vbn + ?nnp)] -> NNS[SEM=?nns] VBN[SEM=?vbn] NNP[SEM=?nnp]
VB[SEM='SELECT'] -> 'show' | 'display' | 'list'
NNS[SEM='title, description, category, rating FROM film_list'] -> 'films'
VBN[SEM='WHERE rating'] -> 'rated'
NNP ->