summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--devel/koe/Koe.gf12
-rw-r--r--devel/koe/KoeFre.gf37
2 files changed, 49 insertions, 0 deletions
diff --git a/devel/koe/Koe.gf b/devel/koe/Koe.gf
new file mode 100644
index 000000000..203367bcd
--- /dev/null
+++ b/devel/koe/Koe.gf
@@ -0,0 +1,12 @@
+abstract Koe = {
+
+cat S ; NP ; VP ;
+
+fun
+ Pred : NP -> VP -> S ;
+
+ He, She : NP ;
+
+ Strong : VP ;
+
+}
diff --git a/devel/koe/KoeFre.gf b/devel/koe/KoeFre.gf
new file mode 100644
index 000000000..9841e5bc4
--- /dev/null
+++ b/devel/koe/KoeFre.gf
@@ -0,0 +1,37 @@
+concrete KoeFre of Koe = {
+
+param
+ Gen = Masc | Fem ;
+ Num = Sg | Pl ;
+
+oper
+ Agr : Type = {g : Gen ; n : Num} ;
+
+ predA : Str -> {s : Agr => Str} = \adj ->
+ {s = \\a => copula a.n ++ regA adj a.g a.n} ;
+
+ copula : Num -> Str = \n -> case n of {
+ Sg => "est" ;
+ Pl => "sont"
+ } ;
+
+ regA : Str -> Gen -> Num -> Str = \s,g,n -> case <g,n> of {
+ <Masc,Sg> => s ;
+ <Masc,Pl> => s + "s" ;
+ <Fem,Sg> => s + "e";
+ <Fem,Pl> => s + "es"
+ } ;
+
+lincat
+ NP = {s : Str ; a : Agr} ;
+ VP = {s : Agr => Str} ;
+
+lin
+ Pred np vp = {s = np.s ++ vp.s ! np.a} ;
+
+ He = {s = "il" ; a = {g = Masc ; n = Sg}} ;
+ She = {s = "elle" ; a = {g = Fem ; n = Sg}} ;
+
+ Strong = predA "fort" ;
+
+}