diff --git a/grammars/dep/Dep.gf b/grammars/dep/Dep.gf index 246680cad..76753547a 100644 --- a/grammars/dep/Dep.gf +++ b/grammars/dep/Dep.gf @@ -2,24 +2,41 @@ abstract Dep = { cat NType ; VType ; + CType ; SG NType ; NG NType ; VG VType ; CG VType ; + Slash ; fun NtS, NtQ : NType ; - Vt1, Vt2, VtS : VType ; + CtN, CtV, CtS, CtQ, CtA : CType ; + Vt, VtN : CType -> VType ; + Vt_ : VType ; MkSG : (n : NType) -> (v : VType) -> NG n -> VG v -> CG v -> SG n ; - CG1 : CG Vt1 ; - CG2 : NG NtS -> CG Vt2 ; + CG_ : CG Vt_ ; + CGN : NG NtS -> CG (Vt CtN) ; + CGS : SG NtS -> CG (Vt CtS) ; + CGQ : SG NtQ -> CG (Vt CtQ) ; + + CGN_ : (c : CType) -> NG NtS -> CG (Vt c) -> CG (VtN c) ; + + MkSlash3 : NG NtS -> VG (VtN CtN) -> CG (Vt CtN) -> Slash ; + MkSlash2 : (c : CType) -> NG NtS -> VG (VtN c) -> CG (Vt c) -> Slash ; + MkSlash1 : NG NtS -> VG (Vt CtN) -> Slash ; + SlashQ : NG NtQ -> Slash -> SG NtQ ; John : NG NtS ; Who : NG NtQ ; - Walk : VG Vt1 ; - Love : VG Vt2 ; + Walk : VG Vt_ ; + Love : VG (Vt CtN) ; + Know : VG (Vt CtS) ; + Give : VG (VtN CtN) ; + Tell : VG (VtN CtS) ; + Ask : VG (VtN CtQ) ; } diff --git a/grammars/dep/DepEng.gf b/grammars/dep/DepEng.gf index 9f95dfba9..c77d58a5c 100644 --- a/grammars/dep/DepEng.gf +++ b/grammars/dep/DepEng.gf @@ -1,26 +1,54 @@ -- to test: -- p -cat=SG -tr "who walks" | pt -transform=typecheck -tr | l -concrete DepEng of Dep = { +concrete DepEng of Dep = open ResDep in { lincat - NType, VType = {s : Str} ; + NType, VType, CType = {s : Str} ; SG = {s : Str} ; NG = {s : Str} ; - VG = {s : Str} ; - CG = {s : Str} ; + VG = {s : Str ; c : VComp} ; + CG = {s1,s2 : Str} ; + Slash = {s,s2 : Str} ; lin NtS, NtQ = {s = []} ; - Vt1, Vt2, VtS = {s = []} ; + CtN, CtV, CtS, CtQ, CtA = {s = []} ; + Vt, VtN = \x -> x ; + Vt_ = {s = []} ; - MkSG n v ng vg cg = {s = n.s ++ v.s ++ ng.s ++ vg.s ++ cg.s} ; + MkSG n v ng vg cg = { + s = n.s ++ v.s ++ ng.s ++ vg.s ++ + case1 vg.c ++ cg.s1 ++ case2 vg.c ++ cg.s2 + } ; - CG1 = {s = []} ; - CG2 ng = ng ; + CG_ = {s1,s2 = []} ; + CGN, CGQ = \ng -> {s1 = ng.s ; s2 = []} ; + CGS sg = {s1 = "that" ++ sg.s ; s2 = []} ; + CGN_ c np co = {s1 = c.s ++ np.s ; s2 = co.s1} ; + + MkSlash3 np v co = { + s = np.s ++ v.s ++ case1 v.c ++ co.s1 ; + s2 = case2 v.c + } ; + MkSlash2 c np v co = { + s = c.s ++ np.s ++ v.s ++ case2 v.c ++ co.s2 ; + s2 = case1 v.c + } ; + MkSlash1 np v = { + s = np.s ++ v.s ; + s2 = case1 v.c + } ; + + SlashQ qp sl = {s = sl.s2 ++ qp.s ++ sl.s} ; John = {s = "John"} ; Who = {s = "who"} ; - Walk = {s = "walks"} ; - Love = {s = "loves"} ; + Walk = {s = "walks" ; c = VC_} ; + Love = {s = "loves" ; c = VC1 C_} ; + Know = {s = "knows" ; c = VC_} ; + Give = {s = "gives" ; c = VC2 C_ C_to} ; + Tell = {s = "tells" ; c = VC_} ; + Ask = {s = "asks" ; c = VC_} ; + } diff --git a/grammars/dep/ResDep.gf b/grammars/dep/ResDep.gf new file mode 100644 index 000000000..2c94cbbf3 --- /dev/null +++ b/grammars/dep/ResDep.gf @@ -0,0 +1,17 @@ +resource ResDep = { + param + Case = C_ | C_to ; + VComp = VC_ | VC1 Case | VC2 Case Case ; + + oper + case1, case2 : VComp -> Str ; + case1 c = case c of { + VC1 C_to => "to" ; + VC2 C_to _ => "to" ; + _ => [] + } ; + case2 c = case c of { + VC2 _ C_to => "to" ; + _ => [] + } ; +}