blob: 1ec1fc10a4c27ffd35f24d558b526cfd819a8473 (
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
|
concrete RelativeEng of Relative = CatEng ** open ResEng in {
flags optimize=all_subs ;
lin
RelCl cl = {
s = \\t,a,p,_ => "such" ++ "that" ++ cl.s ! t ! a ! p ! ODir ;
c = Nom
} ;
RelVP rp vp = {
s = \\t,ant,b,ag =>
let
agr = case rp.a of {
RNoAg => ag ;
RAg a => a
} ;
cl = mkClause (rp.s ! RC (fromAgr agr).g Nom) agr vp
in
cl.s ! t ! ant ! b ! ODir ;
c = Nom
} ;
-- Pied piping: "at which we are looking". Stranding and empty
-- relative are defined in $ExtraEng.gf$ ("that we are looking at",
-- "we are looking at").
RelSlash rp slash = {
s = \\t,a,p,agr =>
slash.c2 ++ rp.s ! RPrep (fromAgr agr).g ++ slash.s ! t ! a ! p ! ODir ;
c = Acc
} ;
FunRP p np rp = {
s = \\c => np.s ! Acc ++ p.s ++ rp.s ! RPrep (fromAgr np.a).g ;
a = RAg np.a
} ;
IdRP =
let varr : Str -> Str = \x -> variants {x ; "that"} --- for bwc
in {
s = table {
RC _ Gen => "whose" ;
RC Neutr _ => varr "which" ;
RC _ Acc => varr "whom" ;
RC _ Nom => varr "who" ;
RPrep Neutr => "which" ;
RPrep _ => "whom"
} ;
a = RNoAg
} ;
}
|