summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoraarne <unknown>2005-09-01 19:18:55 +0000
committeraarne <unknown>2005-09-01 19:18:55 +0000
commit5e190b38fdd3c454a2b7e1ae83d51b37227e27fc (patch)
treee8942bd467e55caa4546b0265de6b79062fcb830
parent7ad0dda9ed46b9ea80972123eac49d8f068efa7a (diff)
parameters to dep
-rw-r--r--grammars/dep/Dep.gf27
-rw-r--r--grammars/dep/DepEng.gf48
-rw-r--r--grammars/dep/ResDep.gf17
3 files changed, 77 insertions, 15 deletions
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" ;
+ _ => []
+ } ;
+}