summaryrefslogtreecommitdiff
path: root/grammars/logic/ResFre.gf
diff options
context:
space:
mode:
authoraarne <unknown>2004-11-12 09:49:36 +0000
committeraarne <unknown>2004-11-12 09:49:36 +0000
commit543d2c976a49b93d47288754779d0eac4a9adbdc (patch)
treeecdc2442f3fd58327bd17d0ef7d02a764406b6ce /grammars/logic/ResFre.gf
parent8b35ece65f76b665b17d360d5d55666655473eb0 (diff)
French logic
Diffstat (limited to 'grammars/logic/ResFre.gf')
-rw-r--r--grammars/logic/ResFre.gf78
1 files changed, 78 insertions, 0 deletions
diff --git a/grammars/logic/ResFre.gf b/grammars/logic/ResFre.gf
new file mode 100644
index 000000000..7283e9fcd
--- /dev/null
+++ b/grammars/logic/ResFre.gf
@@ -0,0 +1,78 @@
+resource ResFre = {
+param
+Gen = masc | fem ;
+Num = sg | pl ;
+Mod = ind | subj ;
+Cas = nom | aa | dd ;
+
+oper
+nomReg : Str -> Num => Str = \str -> table {{sg} => str ; {pl} => str + "s"} ;
+adjReg : Str -> Gen => Num => Str = \str ->
+ table {{masc} => nomReg str ; {fem} => nomReg (str + "e")} ;
+adjEl : Str -> Gen => Num => Str = \str ->
+ table {{masc} => nomReg str ; {fem} => nomReg (str + "le")} ;
+adjAl : Str -> Gen => Num => Str = \str ->
+ table {{masc} => table {{sg} => str + "l" ; {pl} => str + "ux"} ;
+ {fem} => nomReg (str + le) } ;
+adjEr : Str -> Gen => Num => Str = \str ->
+ table {{masc} => nomReg (str + "er") ; {fem} => nomReg (str + "ère")} ;
+
+LinElem = {g : Gen ; s : Cas => Str} ;
+LinProp = {s : Mod => Str} ;
+
+voyelle : Strs = strs {"a" ; "e" ; "i" ; "o" ; "u" ; "y" ; "é"} ;
+elision : Str = pre {"e" ; "'" / voyelle} ;
+ne : Str = "n" + elision ;
+de : Str = "d" + elision ;
+le : Str = "l" + elision ;
+que : Str = "qu" + elision ;
+
+si : Str = pre {"si" ; "s'" / strs {"il" ; "ils"}} ;
+indef : Gen => Str = table {{masc} => "un" ; _ => "une"} ;
+tel : Gen => Num => Str = adjEl "tel" ;
+tout : Gen => Num => Str =
+ table {{masc} => table {{sg} => "tout" ; {pl} => "tous"} ; {fem} => nomReg "toute" } ;
+etre : Num => Mod => Str = formVerbe "est" "soit" "sont" "soient" ;
+
+formVerbe : Str -> Str -> Str -> Str -> Num => Mod => Str =
+ \sgi -> \sgs -> \pli -> \pls ->
+ table {{sg} => table {{ind} => sgi ; {subj} => sgs} ;
+ {pl} => table {{ind} => pli ; {subj} => pls}} ;
+prep : Cas => Str =
+ table {{nom} => [] ; {aa} => "à" ; {dd} => de} ;
+
+defin : Num => Gen => Cas => Str =
+ table {
+ {sg} => table {
+ {masc} => table {
+ {dd} => pre {"du" ; "de"++"l'" / voyelle} ;
+ {aa} => pre {"au" ; "à"++"l'" / voyelle} ;
+ c => prep ! c ++ le
+ } ;
+ {fem} => table {
+ c => prep ! c ++ pre {"la" ; "l'" / voyelle}
+ }
+ } ;
+ {pl} => table {
+ _ => table {
+ {dd} => "des" ;
+ {aa} => "aux" ;
+ c => prep ! c ++ "les"
+ }
+ }
+ } ;
+
+pronom : Gen => Cas => Str = table {
+ masc => table {nom => "il" ; c => prep ! c ++ "lui"} ;
+ fem => table {c => prep ! c ++ "elle"}
+ } ;
+
+mkPropA1 : LinElem -> (Gen => Num => Str) -> LinProp = \elem -> \adj ->
+ {s = table {m => elem.s ! nom ++ etre ! sg ! m ++ adj ! elem.g ! sg}} ;
+
+mkPropA2 : Cas -> LinElem -> (Gen => Num => Str) -> LinElem -> LinProp =
+ \cas -> \elem -> \adj -> \elem2 -> let
+ {adjP : Gen => Num => Str = table {g => table {n => adj ! g ! n ++ elem2.s ! cas}}}
+ in mkPropA1 elem adjP ;
+
+}