首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在某些情况下GF不能输出介词

在某些情况下GF不能输出介词
EN

Stack Overflow用户
提问于 2020-12-14 15:14:29
回答 1查看 73关注 0票数 1

我在GF上写了很多不同的句子,其中包含介词,但我发现在某些情况下GF输出不包含我在下面的程序中定义的介词。

不知道为什么会有这样的输出!

摘要:

代码语言:javascript
复制
abstract Test = {
flags startcat = Imperative;
cat
    Imperative;
fun

-- Utt
Sentence : Imperative;}

混凝土:

代码语言:javascript
复制
concrete TestEng of Test = open SyntaxEng,  ParadigmsEng in {

lincat
    Imperative  = Imp;
lin

    Sentence = mkImp (mkVP
                    (mkV2 (mkV "play"))
                    (mkNP
                        a_Det
                        (mkCN
                            (mkN2
                                (mkN "movie")
                                for_Prep
                                ))));}

输出:

代码语言:javascript
复制
play a movie, play a movie, play a movie, play a movie, do not play a movie, do not play a movie, do not play a movie, do not play a movie, don't play a movie, don't play a movie, don't play a movie, don't play a movie

最美好祝愿~

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-14 16:08:34

N2的预定用途

“N2”和“N3”的目的是表示争论的名词。RGL文档中的例子是“从这个城市到巴黎的距离”。

现在,显然你可以说“距离”,这是没有错的。这就是为什么我们有一些函数可以使N2和N3成为一个没有参数的CN。

相反,你可以说,“从东京到巴黎的树”并不是错的。这是一个愚蠢的上下文:“我们要送哪棵树到哪个地方?”这是从东京到巴黎的那棵树。

但是,我希望你们也同意,X和Y的论点对于“距离”比“树”更自然一些。这句话的意思是模糊的--作为语法学家,你总是可以决定在名词中编码介词是否更有意义(把介词编码成N2/N3),还是把完全状语加在普通名词(N)上。

N2中的介词发生了什么变化?

让我们看看在N2和CN中发生了什么。

代码语言:javascript
复制
oper
  movie_for : N2 = mkN2 (mkN "movie") for_Prep ;

N2有一个固有的介词,用于潜在的补语。我们再检查一遍它是否在那里:

代码语言:javascript
复制
  cc -table movie_for
  s . Sg => Nom => movie
  s . Sg => Gen => movie's
  s . Pl => Nom => movies
  s . Pl => Gen => movies'
  c2 . for
  g . Neutr

正如我前面提到的,您可以通过任何一种方式将N2添加到CN中:添加补语或不添加补语。如果我们使用补语,您将看到介词和补语都添加到CN的s字段中。

代码语言:javascript
复制
> cc -table mkCN movie_for somebody_NP
  s . ParamX.Sg => ResEng.Nom => movie for somebody
  s . ParamX.Sg => ResEng.Gen => movie for somebody
  s . ParamX.Pl => ResEng.Nom => movies for somebody
  s . ParamX.Pl => ResEng.Gen => movies for somebody
  g . ResEng.Neutr

但是,如果使用没有补语的版本,介词将保留在c2字段中。

代码语言:javascript
复制
> cc -table mkCN movie_for
  s . ParamX.Sg => ResEng.Nom => movie
  s . ParamX.Sg => ResEng.Gen => movie's
  s . ParamX.Pl => ResEng.Nom => movies
  s . ParamX.Pl => ResEng.Gen => movies'
  c2 . for
  g . ResEng.Neutr

当我们把CN变成NP时,c2字段就被完全忽略了。

为什么?

这是故意的行为。我们可以说“距离很远”,“东京到巴黎的距离很长”,但很难说“*从东京到巴黎的距离很长”。因此,这同样适用于任何N2和N3:介词只有在添加实际补语时才会使用。

你是专门为“电影”制作的,还是这只是一个简化的例子?如果你告诉我你想要构造什么样的短语,我可以帮你找到正确的函数。

编辑。为了制作“为我播放一部电影”,这个作品:

代码语言:javascript
复制
Sentence =
 mkImp (mkVP
          (mkVP (mkV2 "play") (mkNP a_Det (mkN "movie")))
          (SyntaxEng.mkAdv for_Prep i_NP)
       ) ;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65291468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档