summaryrefslogtreecommitdiff
path: root/grammars/resource/french/SyntaxFra.gf
diff options
context:
space:
mode:
Diffstat (limited to 'grammars/resource/french/SyntaxFra.gf')
-rw-r--r--grammars/resource/french/SyntaxFra.gf295
1 files changed, 295 insertions, 0 deletions
diff --git a/grammars/resource/french/SyntaxFra.gf b/grammars/resource/french/SyntaxFra.gf
new file mode 100644
index 000000000..98cec2966
--- /dev/null
+++ b/grammars/resource/french/SyntaxFra.gf
@@ -0,0 +1,295 @@
+--# -path=.:../romance:../../prelude
+
+instance SyntaxFra of SyntaxRomance = TypesFra ** open Prelude, (CO=Coordination), MorphoFra in {
+
+oper
+ nameNounPhrase = \jean ->
+ normalNounPhrase
+ (\\c => prepCase c ++ jean.s)
+ jean.g
+ Sg ;
+
+ chaqueDet = mkDeterminer1 Sg "chaque" ;
+ tousDet = mkDeterminer Pl ["tous les"] ["toutes les"] ;
+ plupartDet = mkDeterminer1 Pl ["la plupart des"] ;
+ unDet = mkDeterminer Sg "un" "une" ;
+ plDet = mkDeterminer1 Pl "des" ; ---
+
+ quelDet = mkDeterminer Sg "quel" "quelle" ;
+ quelsDet = mkDeterminer Pl "quels" "quelles" ;
+
+ npGenPoss = \n,ton,mec ->
+ \\c => prepCase c ++ ton.s ! Poss n mec.g ++ mec.s ! n ;
+
+ mkAdjReg : Str -> Bool -> Adjective = \adj,p ->
+ mkAdjective (adjGrand adj) p ;
+
+ comparConj = elisQue ;
+
+ mkAdjDegrReg : Str -> Bool -> AdjDegr = \adj,p ->
+ mkAdjDegrLong (adjGrand adj) p ;
+
+-- The commonest case for functions is common noun + "de".
+
+ funDe : CommNounPhrase -> Function = \mere ->
+ mere ** complementCas genitive ;
+
+-- Chains of "dont" - "dont" do not arise.
+
+ funRelPron : Function -> RelPron -> RelPron = \mere,lequel ->
+ {s = table {
+ RComplex g n c => variants {
+ case mere.c of { ---
+ Gen => lequel.s ! RSimple Gen ++
+ artDef mere.g n c ++ mere.s ! n ;
+ _ => nonExist} ;
+ artDef mere.g n c ++ mere.s ! n ++
+ mere.s2 ++ lequel.s ! RComplex g n mere.c
+ } ;
+ _ => nonExist
+ } ;
+ g = RG mere.g
+ } ;
+
+
+-- Verbs
+
+ negVerb = \va -> elisNe ++ va ++ "pas" ;
+
+ copula = \b -> (etreNetre b).s ;
+
+ isTransVerbClit = \v -> case v.c of {
+ Acc => True ;
+ _ => False --- hmmm
+ } ;
+
+-- The "ne - pas" negation.
+
+ posNeg = \b,v,c ->
+ if_then_else Str b
+ (v ++ c)
+ (elisNe ++ v ++ "pas" ++ c) ; --- exception: infinitive!
+
+-- Exampe: 'to be or not to be'.
+
+ etreNetre : Bool -> VerbPres = \b ->
+ {s = \\w => posNeg b (verbEtre.s ! w) []} ; ---- v reveals a BUG in refresh
+
+ locativeNounPhrase = \jean ->
+ {s = "dans" ++ jean.s ! Ton Acc} ;
+
+ embedConj = elisQue ;
+
+-- Relative pronouns
+
+ identRelPron = {
+ s = table {
+ RSimple c => relPronForms ! c ;
+ RComplex g n c => composRelPron g n c
+ } ;
+ g = RNoGen
+ } ;
+
+ suchPron = telPron ;
+
+ composRelPron = lequelPron ;
+
+ allRelForms = \lequel,g,n,c ->
+ variants {
+ lequel.s ! RSimple c ;
+ lequel.s ! RComplex g n c
+ } ;
+
+-- Interrogative pronouns
+
+ nounIntPron = \n, mec ->
+ {s = \\c => prepCase c ++ quelPron mec.g n ++ mec.s ! n ;
+ g = mec.g ;
+ n = n
+ } ;
+
+ intPronWho = \num -> {
+ s = \\c => prepCase c ++ "qui" ;
+ g = Masc ; --- can we decide this?
+ n = num
+ } ;
+
+ intPronWhat = \num -> {
+ s = table {
+ Gen => ["de quoi"] ;
+ Acc => ["à quoi"] ;
+ c => elisQue
+ } ;
+ g = Masc ; --- can we decide this?
+ n = num
+ } ;
+
+-- Questions
+
+ questVerbPhrase = \jean,dort ->
+ {s = table {
+ DirQ => optStr (estCeQue Acc) ++ (predVerbPhrase jean dort).s ! Ind ;
+ IndirQ => siSubj ++ (predVerbPhrase jean dort).s ! Ind
+ }
+ } ;
+
+ intVerbPhrase = \qui, dort ->
+ {s = table {
+ DirQ => qui.s ! Nom ++ optStr (estCeQue Nom) ++
+ dort.s ! qui.g ! VFin Ind qui.n P3 ;
+ IndirQ => "ce" ++ qui.s ! Nom ++ dort.s ! qui.g ! VFin Ind qui.n P3
+ }
+ } ;
+
+ intSlash = \Qui, Tuvois ->
+ let {qui = Tuvois.s2 ++ Qui.s ! Tuvois.c ; tuvois = Tuvois.s ! Ind} in
+ {s = table {
+ DirQ => qui ++ optStr (estCeQue Acc) ++ tuvois ;
+ IndirQ => ifCe Tuvois.c ++ qui ++ tuvois
+ }
+ } ;
+
+-- An auxiliary to distinguish between
+-- "je ne sais pas" ("ce qui dort" / "ce que tu veux" / "à qui tu penses").
+
+ ifCe : Case -> Str = \c -> case c of {
+ Nom => "ce" ;
+ Acc => "ce" ;
+ _ => []
+ } ;
+
+ questAdverbial = \quand, jean, dort ->
+ let {jeandort = (predVerbPhrase jean dort).s ! Ind} in
+ {s = table {
+ DirQ => quand.s ++ optStr (estCeQue Acc) ++ jeandort ;
+ IndirQ => quand.s ++ jeandort
+ }
+ } ;
+
+----- moved from Morpho
+
+--2 Articles
+--
+-- A macro for defining gender-dependent tables will be useful.
+-- Its first application is in the indefinite article.
+--
+-- Notice that the plural genitive is special: "de femmes".
+
+ genForms : Str -> Str -> Gender => Str = \bon,bonne ->
+ table {Masc => bon ; Fem => bonne} ;
+
+ artIndef = \g,n,c -> case <n,c> of {
+ <Sg,_> => prepCase c ++ genForms "un" "une" ! g ;
+ <Pl,Gen> => elisDe ;
+ _ => prepCase c ++ "des"
+ } ;
+
+ artDef = \g,n,c -> artDefTable ! g ! n ! c ;
+
+ pronJe = mkPronoun
+ (elision "j")
+ (elision "m")
+ (elision "m")
+ "moi"
+ "mon" (elisPoss "m") "mes"
+ PNoGen -- gender cannot be known from pronoun alone
+ Sg
+ P1
+ Clit1 ;
+
+ pronTu = mkPronoun
+ "tu"
+ (elision "t")
+ (elision "t")
+ "toi"
+ "ton" (elisPoss "t") "tes"
+ PNoGen
+ Sg
+ P2
+ Clit1 ;
+
+ pronIl = mkPronoun
+ "il"
+ (elision "l")
+ "lui"
+ "lui"
+ "son" (elisPoss "s") "ses"
+ (PGen Masc)
+ Sg
+ P3
+ Clit2 ;
+
+ pronElle = mkPronoun
+ "elle"
+ elisLa
+ "lui"
+ "elle"
+ "son" (elisPoss "s") "ses"
+ (PGen Fem)
+ Sg
+ P3
+ Clit2 ;
+
+ pronNous = mkPronoun
+ "nous"
+ "nous"
+ "nous"
+ "nous"
+ "notre" "notre" "nos"
+ PNoGen
+ Pl
+ P1
+ Clit3 ;
+
+ pronVous = mkPronoun
+ "vous"
+ "vous"
+ "vous"
+ "vous"
+ "votre" "votre" "vos"
+ PNoGen
+ Pl --- depends!
+ P2
+ Clit3 ;
+
+ pronIls = mkPronoun
+ "ils"
+ "les"
+ "leur"
+ "eux"
+ "leur" "leur" "leurs"
+ (PGen Masc)
+ Pl
+ P3
+ Clit1 ;
+
+ pronElles = mkPronoun
+ "elles"
+ "les"
+ "leur"
+ "elles"
+ "leur" "leur" "leurs"
+ (PGen Fem)
+ Pl
+ P3
+ Clit1 ;
+
+-- moved from ResFra
+
+ commentAdv = ss "comment" ;
+ quandAdv = ss "quand" ;
+ ouAdv = ss "où" ;
+ pourquoiAdv = ss "pourquoi" ;
+
+ etConj = ss "et" ** {n = Pl} ;
+ ouConj = ss "ou" ** {n = Sg} ;
+ etetConj = sd2 "et" "et" ** {n = Pl} ;
+ ououConj = sd2 "ou" "ou" ** {n = Sg} ;
+ niniConj = sd2 "ni" "ni" ** {n = Sg} ; --- requires ne !
+ siSubj = ss siSubj ;
+ quandSubj = ss "quand" ;
+
+ ouiPhr = ss ["Oui ."] ;
+ nonPhr = ss ["Non ."] ; --- and also Si!
+
+}