summaryrefslogtreecommitdiff
path: root/examples/query/QueryI.gf
blob: 05d3ee9389d099281e330dd942acc82a7bd647e0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
incomplete concrete QueryI of Query = open
  Syntax,
  LexQuery,
  Lang,
  Prelude
in {

lincat
  Move = Utt ; ---- Text ;
  Query = Utt ;
  Answer = Cl ; -- Utt ;
  Set = NP ;
  Interrogative = IP ;
  Function = Fun ; -- = {cn : CN ; prep : Prep} ;
  Kind = CN ;
  Property = Prop ; -- = {ap : AP ; vp : VP} ;
  Relation = Rel ; -- = {ap : AP ; vp : VP ; prep : Prep} ;
  Individual = NP ;
  Name = NP ;
  Loc = NP ;
  Org = NP ;
  Pers = NP ;
  [Individual] = [NP] ;

lin
  MQuery  q = q ; ---- mkText (mkPhr q) questMarkPunct ;
  MAnswer a = mkUtt a ; ---- mkText (mkPhr a) fullStopPunct ;
 
  QSet s = 
    let 
     ss : NP = s 
        | mkNP (mkNP theSg_Det Lang.name_N) (mkAdv namePrep s)
        | mkNP (mkNP thePl_Det Lang.name_N) (mkAdv namePrep s)
----        | mkNP (GenNP s) sgNum Lang.name_N 
----        | mkNP (GenNP s) plNum Lang.name_N ;
    in 
      mkUtt (mkImp (giveMe ss))
    | mkUtt (mkQS (mkQCl (Lang.CompIP whatSg_IP) ss))
    | mkUtt (mkQS (mkQCl (Lang.CompIP (Lang.IdetIP (mkIDet which_IQuant))) ss))
    | mkUtt ss ;

  QWhere s = 
      mkUtt (mkQS (mkQCl where_IAdv s))
    | mkUtt (mkQS (mkQCl where_IAdv (mkCl s located_A))) ;
  QWhat i p = mkUtt (mkQS (mkQCl i p.vp)) ;
  QRelWhere s p = mkUtt (mkQS (mkQCl where_IAdv (mkCl s p.vp))) ;

  QFun r s = 
      mkUtt 
        (mkImp (giveMe (mkNP and_Conj s (detSet s r.cn))))
    | mkUtt (mkQS (mkQCl (mkIP what_IQuant plNum r.cn) s have_V2))
    | mkUtt (mkQS (mkQCl whatSg_IP 
        (mkClSlash (mkClSlash s have_V2) (mkAdv LexQuery.as_Prep (mkNP aPl_Det r.cn))))) ; 

  QFunPair s f = 
    let 
     ss0 : NP = s 
              | mkNP (mkNP thePl_Det Lang.name_N) (mkAdv namePrep s) ;
     ss  : NP = mkNP and_Conj ss0 (mkNP (mkQuant they_Pron) plNum f.cn)
              | mkNP ss0 (mkAdv with_Prep (mkNP (mkQuant they_Pron) plNum f.cn))
    in 
      mkUtt (mkImp (giveMe ss))
    | mkUtt (mkQS (mkQCl (Lang.CompIP whatPl_IP) ss))
    | mkUtt (mkQS (mkQCl (Lang.CompIP (Lang.IdetIP (mkIDet which_IQuant))) ss))
    | mkUtt ss ;

  QInfo  s = 
    let
      info : NP = mkNP (all_NP | (mkNP information_N)) (mkAdv about_Prep s) ;
    in
      mkUtt (mkImp (giveMe info))
    | mkUtt (mkQCl whatSg_IP 
        (mkClSlash (mkClSlash (mkNP youSg_Pron) LexQuery.know_V2) (mkAdv about_Prep s)))
    | mkUtt info ;

  QCalled i = mkUtt (mkQS (mkQCl how_IAdv (mkCl i 
    (mkVP (also_AdV | otherwise_AdV) (mkVP called_A))))) ;

  QWhether a = mkUtt (mkQS a) ;

  AInd s i = (mkCl s i) ;
  AName s n = (mkCl n (mkNP the_Det (mkCN Lang.name_N (mkAdv namePrep s)))) ;
  AProp s p = (mkCl s p.vp) ;

  SAll k = mkNP all_Predet (mkNP aPl_Det k) | mkNP thePl_Det k ;
  SOne k = mkNP n1_Numeral k ;
  SIndef k = mkNP a_Det k ;
  SDef k = mkNP the_Det k ;
  SPlural k = mkNP aPl_Det k ;
  SOther k = mkNP aPl_Det (mkCN other_A k) ;
  SInd i = i ;
  SInds is = mkNP and_Conj is ;

  IWhich k = 
      mkIP what_IQuant  (sgNum | plNum) k
    | mkIP which_IQuant (sgNum | plNum) k ;

  IWho = whoSg_IP | whoPl_IP ;
  IWhat = whatSg_IP | whatPl_IP ;

  KFunSet r s = 
     mkCN r.cn (mkAdv r.prep s) ;

  KFunKind k r s = 
     mkCN k (mkRS (mkRCl which_RP (mkVP (mkNP aPl_Det (mkCN r.cn (mkAdv r.prep s))))))
   | mkCN k (mkRS (mkRCl that_RP (mkVP (mkNP aPl_Det (mkCN r.cn (mkAdv r.prep s)))))) 
   ;
  
  KFunPair k r = mkCN k (mkAdv with_Prep (mkNP (mkQuant they_Pron) plNum r.cn)) ;
  KProp p k = 
      participlePropCN p k
    | mkCN k (mkRS (mkRCl which_RP p.vp)) 
    | mkCN k (mkRS (mkRCl that_RP p.vp)) 
     ;
  KFun r = r.cn ;

  IName n = n ;

  PCalled  i  = propCalled i ;
  PCalleds is = propCalled (mkNP or_Conj is) ;

  BaseIndividual = mkListNP ;
  ConsIndividual = mkListNP ;

-- these need new things in resource
lin
  KFunsSet r q s = 
     mkCN (ConjCN and_Conj (BaseCN r.cn q.cn)) (mkAdv r.prep s) ;
  SFun s r = mkNP (GenNP s) plNum r.cn | mkNP (GenNP s) sgNum r.cn ;
  QWhatWhat i j p = mkUtt (mkQS (QuestQVP i (AdvQVP p.vp (mkIAdv p.prep j)))) ;
  QWhatWhere i p = mkUtt (mkQS (QuestQVP i (AdvQVP p.vp where_IAdv))) ;
  PIs i = propVP (mkVP i) ;
  AKind s k = (mkCl s (Lang.UseComp (Lang.CompCN k))) ;

  PRelation r s = {
    ap = AdvAP r.ap (mkAdv r.prep s) ; 
    vp = mkVP r.vp (mkAdv r.prep s)
    } ;

oper
  namePrep : Prep = possess_Prep ;

  relVP : VP -> Prep -> Rel = \vp,p -> {
    ap = vpAP vp ;
    vp = vp ;
    prep = p
    } ;

  propVP : VP -> Prop = \vp -> {
    ap = vpAP vp ;
    vp = vp
    } ;

  propAP : AP -> Prop = \ap -> {
    ap = ap ;
    vp = mkVP ap
    } ;

  relAP : AP -> Prep -> Rel = \ap,p -> {
    ap = ap ;
    vp = mkVP ap ;
    prep = p
    } ;

  propCalled : NP -> Prop = \i -> 
    propAP (mkAP (also_AdA | otherwise_AdA) (mkAP (mkA2 called_A (mkPrep [])) i)) ;

  detSet : NP -> CN -> NP = \s,c -> 
    mkNP (mkQuant they_Pron) plNum c ;


-- lexicon

lincat
  Country = {np : NP ; a : A} ;
  JobTitle = CN ;
lin
  NCountry c = c.np ;
  PCountry c = propAP (mkAP c.a) ;

  NLoc n = n ;
  NOrg n = n ;
  NPers n = n;
}