diff options
| author | aarne <unknown> | 2004-11-12 09:49:36 +0000 |
|---|---|---|
| committer | aarne <unknown> | 2004-11-12 09:49:36 +0000 |
| commit | 543d2c976a49b93d47288754779d0eac4a9adbdc (patch) | |
| tree | ecdc2442f3fd58327bd17d0ef7d02a764406b6ce /grammars/logic/ResFre.gf | |
| parent | 8b35ece65f76b665b17d360d5d55666655473eb0 (diff) | |
French logic
Diffstat (limited to 'grammars/logic/ResFre.gf')
| -rw-r--r-- | grammars/logic/ResFre.gf | 78 |
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 ; + +} |
