From 049e8deca9a2ccb80950150d68b4fe0c9bd2d7a9 Mon Sep 17 00:00:00 2001 From: aarne Date: Sun, 13 Mar 2005 21:29:29 +0000 Subject: [PATCH] French Swadesh, some bugs remain --- examples/stoneage/StoneageFre.gf | 242 +++++++++++++++++++++++++ examples/stoneage/StoneageResFre.gf | 21 +++ lib/resource/french/BasicFre.gf | 21 +-- lib/resource/french/MorphoFre.gf | 15 +- lib/resource/french/ParadigmsFre.gf | 7 +- lib/resource/french/SwadeshLexFre.gf | 246 ++++++++++++++++++++++++++ lib/resource/romance/RulesRomance.gf | 2 +- lib/resource/romance/SyntaxRomance.gf | 121 +++++++++++++ 8 files changed, 660 insertions(+), 15 deletions(-) create mode 100644 examples/stoneage/StoneageFre.gf create mode 100644 examples/stoneage/StoneageResFre.gf create mode 100644 lib/resource/french/SwadeshLexFre.gf diff --git a/examples/stoneage/StoneageFre.gf b/examples/stoneage/StoneageFre.gf new file mode 100644 index 000000000..6696b2659 --- /dev/null +++ b/examples/stoneage/StoneageFre.gf @@ -0,0 +1,242 @@ +--# -path=.:../../lib/resource/romance:../../lib/resource/abstract:../../lib/resource/french:../../lib/prelude + +concrete StoneageFre of Stoneage + = open SyntaxFre, RulesFre, StructuralFre, ParadigmsFre, SwadeshLexFre, + StoneageResFre in { + +flags + startcat=S; optimize=share; + +lincat + S = Phr ; + NP = NP ; + N = N; + CN = CN ; + +lin + + -- Sentence conjunction + +-- AndS s1 s2 = { s = s1.s ++ and_Conj.s ++ s2.s } ** { lock_Phr = <> } ; + + -- NP conjunction + +-- AndNP n1 n2 = ConjNP and_Conj (TwoNP n1 n2); + + + Drink = PresV2 (dirV2 drink_V) ; + Eat = PresV2 (dirV2 eat_V) ; + Bite = PresV2 (dirV2 bite_V) ; + Suck = PresV2 (dirV2 suck_V) ; + See = PresV2 (dirV2 see_V) ; + Hear = PresV2 (dirV2 hear_V) ; + Know = PresV2 (dirV2 know_V) ; + Think = PresV2 (dirV2 think_V) ; + Smell = PresV2 (dirV2 smell_V) ; + Fear = PresV2 (dirV2 fear_V) ; + Kill = PresV2 (dirV2 kill_V) ; + Fight = PresV2 (dirV2 fight_V) ; + Hunt = PresV2 (dirV2 hunt_V) ; + Hit = PresV2 (dirV2 hit_V) ; + Cut = PresV2 (dirV2 cut_V) ; + Split = PresV2 (dirV2 split_V) ; + Stab = PresV2 (dirV2 stab_V) ; + Scratch = PresV2 (dirV2 scratch_V) ; + Hold = PresV2 (dirV2 hold_V) ; + Squeeze = PresV2 (dirV2 squeeze_V) ; + Rub = PresV2 (dirV2 rub_V) ; + Wash = PresV2 (dirV2 wash_V) ; + Wipe = PresV2 (dirV2 wipe_V) ; + Pull = PresV2 (dirV2 pull_V) ; + Push = PresV2 (dirV2 push_V) ; + Throw = PresV2 (dirV2 throw_V) ; + Tie = PresV2 (dirV2 tie_V) ; + Count = PresV2 (dirV2 count_V) ; + + Spit = PresV spit_V ; + Vomit = PresV vomit_V ; + Blow = PresV blow_V ; + Breathe = PresV breathe_V ; + Laugh = PresV laugh_V ; + Sleep = PresV sleep_V ; + Live = PresV live_V ; + Die = PresV die_V ; + Dig = PresV dig_V ; + Swim = PresV swim_V ; + Fly = PresV fly_V ; + Walk = PresV walk_V ; + Come = PresV come_V ; + Lie = PresV lie_V ; + Sit = PresV sit_V ; + Stand = PresV stand_V ; + Turn = PresV turn_V ; + Fall = PresV fall_V ; + Sing = PresV sing_V ; + Sew = PresV sew_V ; + Play = PresV play_V ; + Float = PresV float_V ; + Flow = PresV flow_V ; + Freeze = PresV freeze_V ; + Swell = PresV swell_V ; + Burn = PresV burn_V ; + + Give = PresV3 (dirV3 give_V dative) ; + +-- Say = ; + + The_One = DefOneNP ; + The_Many = DefNumNP NoNum ; + A = IndefOneNP ; + This = DetNP this_Det ; + That = DetNP that_Det ; + All = NDetNP all_NDet NoNum ; + Many = DetNP many_Det ; + Some_One = DetNP some_Det ; + Some_Many = NDetNP some_NDet NoNum ; + Few = DetNP few_Det ; + Other = DetNP other_Det ; + + One = IndefNumNP one_Num ; + Two = IndefNumNP two_Num ; + Three = IndefNumNP three_Num ; + Four = IndefNumNP four_Num ; + Five = IndefNumNP five_Num ; + + -- Pronouns + + I = i_NP ; + You_One = thou_NP ; + He = he_NP ; + We = we_NP ; + You_Many = you_NP ; + They = they_NP ; + + -- Nouns + + Woman = UseN woman_N ; + Man = UseN man_N ; + Person = UseN person_N ; + Child = UseN child_N ; + Wife = UseN wife_N ; + Husband = UseN husband_N ; + Mother = UseN mother_N ; + Father = UseN father_N ; + Animal = UseN animal_N ; + Fish = UseN fish_N ; + Bird = UseN bird_N ; + Dog = UseN dog_N ; + Louse = UseN louse_N ; + Snake = UseN snake_N ; + Worm = UseN worm_N ; + Tree = UseN tree_N ; + Forest = UseN forest_N ; + Stick = UseN stick_N ; + Fruit = UseN fruit_N ; + Seed = UseN seed_N ; + Leaf = UseN leaf_N ; + Root = UseN root_N ; + Bark = UseN bark_N ; + Flower = UseN flower_N ; + Grass = UseN grass_N ; + Rope = UseN rope_N ; + Skin = UseN skin_N ; + Meat = UseN meat_N ; + Blood = UseN blood_N ; + Bone = UseN bone_N ; + Fat = UseN fat_N ; + Egg = UseN egg_N ; + Horn = UseN horn_N ; + Tail = UseN tail_N ; + Feather = UseN feather_N ; + Hair = UseN hair_N ; + Head = UseN head_N ; + Ear = UseN ear_N ; + Eye = UseN eye_N ; + Nose = UseN nose_N ; + Mouth = UseN mouth_N ; + Tooth = UseN tooth_N ; + Tongue = UseN tongue_N ; + Fingernail = UseN fingernail_N ; + Foot = UseN foot_N ; + Leg = UseN leg_N ; + Knee = UseN knee_N ; + Hand = UseN hand_N ; + Wing = UseN wing_N ; + Belly = UseN belly_N ; + Guts = UseN guts_N ; + Neck = UseN neck_N ; + Back = UseN back_N ; + Breast = UseN breast_N ; + Heart = UseN heart_N ; + Liver = UseN liver_N ; + Sun = UseN sun_N ; + Moon = UseN moon_N ; + Star = UseN star_N ; + Water = UseN water_N ; + Rain = UseN rain_N ; + River = UseN river_N ; + Lake = UseN lake_N ; + Sea = UseN sea_N ; + Salt = UseN salt_N ; + Stone = UseN stone_N ; + Sand = UseN sand_N ; + Dust = UseN dust_N ; + Earth = UseN earth_N ; + Cloud = UseN cloud_N ; + Fog = UseN fog_N ; + Sky = UseN sky_N ; + Wind = UseN wind_N ; + Snow = UseN snow_N ; + Ice = UseN ice_N ; + Smoke = UseN smoke_N ; + Fire = UseN fire_N ; + Ashes = UseN ashes_N ; + Road = UseN road_N ; + Mountain = UseN mountain_N ; + Night = UseN night_N ; + Day = UseN day_N ; + Year = UseN year_N ; + Name = UseN name_N ; + +-- NameOf = AppN2 name_N2 ; + MotherOf = AppN2 (mkN2 mother_N genitive) ; + FatherOf = AppN2 (mkN2 father_N genitive) ; + + Big = ModPosA big_ADeg ; + Long = ModPosA long_ADeg ; + Wide = ModPosA wide_ADeg ; + Thick = ModPosA thick_ADeg ; + Heavy = ModPosA heavy_ADeg ; + Small = ModPosA small_ADeg ; + Short = ModPosA short_ADeg ; + Narrow = ModPosA narrow_ADeg ; + Thin = ModPosA thin_ADeg ; + Red = ModPosA red_ADeg ; + Green = ModPosA green_ADeg ; + Yellow = ModPosA yellow_ADeg ; + White = ModPosA white_ADeg ; + Black = ModPosA black_ADeg ; + Warm = ModPosA warm_ADeg ; + Cold = ModPosA cold_ADeg ; + Full = ModPosA full_ADeg ; + New = ModPosA new_ADeg ; + Old = ModPosA old_ADeg ; + Good = ModPosA good_ADeg ; + Bad = ModPosA bad_ADeg ; + Rotten = ModPosA rotten_ADeg ; + Dirty = ModPosA dirty_ADeg ; + Straight = ModPosA straight_ADeg ; + Round = ModPosA round_ADeg ; + Sharp = ModPosA sharp_ADeg ; + Dull = ModPosA dull_ADeg ; + Smooth = ModPosA smooth_ADeg ; + Wet = ModPosA wet_ADeg ; + Dry = ModPosA dry_ADeg ; + Correct = ModPosA correct_ADeg ; + Near = ModPosA near_ADeg ; +-- Far = ModPosA far_ADeg ; + + Right = ModAP (UseA right_A) ; + Left = ModAP (UseA left_A) ; + +} \ No newline at end of file diff --git a/examples/stoneage/StoneageResFre.gf b/examples/stoneage/StoneageResFre.gf new file mode 100644 index 000000000..c1aedf59a --- /dev/null +++ b/examples/stoneage/StoneageResFre.gf @@ -0,0 +1,21 @@ +resource StoneageResFre = open RulesFre, SyntaxFre, ParadigmsFre in { + +oper + PresV : V -> NP -> Phr = \v,s -> PresCl (mkSats s v) ; + PresV2 : V2 -> NP -> NP -> Phr = \v,s,o -> + PresCl (mkSatsObject s v o) ; + PresV3 : V3 -> NP -> NP -> NP -> Phr = \v,s,o,r -> + PresCl (insertObject (mkSatsObject s v o) v.c3 v.s3 r) ; + PresVasV2 : V -> NP -> NP -> Phr = \ v -> PresV2 (dirV2 v) ; + + PresCl : Sats -> Phr = \c -> + {s = (UseCl (PosTP TPresent ASimul) + (sats2clause c ** {lock_Cl = <>}) + ).s ! Ind ; + lock_Phr = <> + } ; + + ModPosA : ADeg -> CN -> CN = \a -> ModAP (PositADeg a) ; + ModA : A -> CN -> CN = \a -> ModAP (UseA a) ; + +} \ No newline at end of file diff --git a/lib/resource/french/BasicFre.gf b/lib/resource/french/BasicFre.gf index 7df7406e2..3b90946eb 100644 --- a/lib/resource/french/BasicFre.gf +++ b/lib/resource/french/BasicFre.gf @@ -15,13 +15,13 @@ lin art_N = regN "art" feminine ; ask_V2Q = mkV2Q (regV "demander") dative ; baby_N = regN "bébé" masculine ; - bad_ADeg = mkADeg (regA "mauvaise") (regA "pire") ; + bad_ADeg = prefADeg (mkADeg (regA "mauvais") (regA "pire")) ; bank_N = regN "banque" feminine ; - beautiful_ADeg = regADeg "joli" ; ---- beau + beautiful_ADeg = prefADeg (regADeg "joli") ; ---- beau become_VA = mkVA devenir_V ; beer_N = regN "bière" feminine ; beg_V2V = mkV2V (regV "demander") accusative dative ; - big_ADeg = regADeg "grand" ; + big_ADeg = prefADeg (regADeg "grand") ; bike_N = regN "vélo" masculine ; bird_N = regN "oiseau" masculine ; black_ADeg = regADeg "noir" ; @@ -83,8 +83,8 @@ lin girl_N = regN "fille" feminine ; glove_N = regN "gant" masculine ; gold_N = regN "or" masculine ; - good_ADeg = mkADeg (mkA "bon" "bonne" "bons" "bien") - (mkA "meilleur" "meilleure" "meilleurs" "mieux") ; + good_ADeg = prefADeg (mkADeg (mkA "bon" "bonne" "bons" "bien") + (mkA "meilleur" "meilleure" "meilleurs" "mieux")) ; go_V = aller_V ; green_ADeg = regADeg "vert" ; harbour_N = regN "port" masculine ; @@ -123,10 +123,11 @@ lin mountain_N = regN "montagne" feminine ; music_N = regN "musique" feminine ; narrow_ADeg = regADeg "étroit" ; - new_ADeg = compADeg (mkA "nouveau" "nouvelle" "nouveaux" "nouvellement") ; + new_ADeg = prefADeg (compADeg (mkA "nouveau" "nouvelle" "nouveaux" "nouvellement")) ; newspaper_N = regN "journal" masculine ; oil_N = regN "huile" feminine ; - old_ADeg = compADeg (mkA "vieux" "vieille" "vieux" "vieillement") ; ---- vieil + old_ADeg = + prefADeg (compADeg (mkA "vieux" "vieille" "vieux" "vieillement")) ; ---- vieil open_V2 = ouvrir_V2 ; paint_V2A = mkV2A (v2V peindre_V2) accusative ; paper_N = regN "papier" masculine ; @@ -167,7 +168,7 @@ lin silver_N = regN "argent" masculine ; sister_N = regN "soeur" feminine ; sleep_V = v2V dormir_V2 ; - small_ADeg = regADeg "petit" ; + small_ADeg = prefADeg (regADeg "petit") ; snake_N = regN "serpent" masculine ; sock_N = regN "chaussette" feminine ; speak_V2 = dirV2 (regV "parler") ; @@ -201,7 +202,7 @@ lin war_N = regN "guerre" masculine ; watch_V2 = dirV2 (regV "regarder") ; water_N = regN "eau" feminine ; - white_ADeg = compADeg (mkA "blanc" "blance" "blancs" "blanchement") ; + white_ADeg = compADeg (mkA "blanc" "blanche" "blancs" "blanchement") ; window_N = regN "fenêtre" feminine ; wine_N = regN "vin" masculine ; win_V2 = dirV2 (regV "gagner") ; ---- vaincre @@ -210,7 +211,7 @@ lin wood_N = regN "bois" masculine ; write_V2 = écrire_V2 ; yellow_ADeg = regADeg "jaune" ; - young_ADeg = regADeg "jeune" ; + young_ADeg = prefADeg (regADeg "jeune") ; do_V2 = faire_V2 ; now_Adv = mkAdv "maintenant" ; diff --git a/lib/resource/french/MorphoFre.gf b/lib/resource/french/MorphoFre.gf index 4c33ded89..b466e3ea8 100644 --- a/lib/resource/french/MorphoFre.gf +++ b/lib/resource/french/MorphoFre.gf @@ -106,8 +106,11 @@ oper -- Then the regular and invariant patterns. adjReg : Str -> Gender => Number => Str = \bu -> table { - Masc => nomReg bu ; - Fem => nomReg (bu + "e") + Masc => (mkNomReg bu Masc).s ; + Fem => nomReg (case last bu of { + "e" => bu ; + _ => bu + "e" + }) } ; adjInvar : Str -> Gender => Number => Str = \bien -> @@ -116,7 +119,12 @@ oper -- Adjectives themselves are records. Here the most common cases: adjGrand : Str -> Adj = \grand -> - mkAdj grand (grand + "s") (grand + "e") (grand + "ement") ; + let grande = case last grand of { + "e" => grand ; + _ => grand + "e" + } + in + mkAdj grand (grand + "s") grande (grande + "ment") ; -- Masculine form used for adverbial; also covers "carré". @@ -154,6 +162,7 @@ oper "er" => adjCher creux ; _ => case Predef.dp 1 creux of { "s" => adjFrancais creux ; + "x" => adjFrancais creux ; "e" => adjJeune creux ; "é" => adjJoli creux ; "i" => adjJoli creux ; diff --git a/lib/resource/french/ParadigmsFre.gf b/lib/resource/french/ParadigmsFre.gf index 041371808..d0379dd03 100644 --- a/lib/resource/french/ParadigmsFre.gf +++ b/lib/resource/french/ParadigmsFre.gf @@ -170,6 +170,10 @@ oper adegA : ADeg -> A ; +-- For prefixed adjectives, the following function is +-- provided. + + prefADeg : ADeg -> ADeg ; --2 Adverbs @@ -284,7 +288,7 @@ oper mkNP x g n = let np = mkNameNounPhrase x g in {s = np.s ; g = np.g ; p = np.p ; c = np.c ; n = n ; lock_NP = <>} ; - mkA a b c d = mkAdj a b c d ** {p = False ; lock_A = <>} ; + mkA a b c d = mkAdj a c b d ** {p = False ; lock_A = <>} ; regA a = mkAdjReg a False ** {p = False ; lock_A = <>} ; prefA a = {s = a.s ; p = True ; lock_A = <>} ; @@ -294,6 +298,7 @@ oper compADeg a = {s = table {Pos => a.s ; _ => \\f => "plus" ++ a.s ! f} ; p = a.p ; lock_ADeg = <>} ; regADeg a = compADeg (regA a) ; + prefADeg a = {s = a.s ; p = True ; lock_ADeg = <>} ; adegA a = {s = a.s ! Pos ; p = a.p ; lock_A = <>} ; diff --git a/lib/resource/french/SwadeshLexFre.gf b/lib/resource/french/SwadeshLexFre.gf new file mode 100644 index 000000000..23da9a627 --- /dev/null +++ b/lib/resource/french/SwadeshLexFre.gf @@ -0,0 +1,246 @@ +--# -path=.:../abstract:../../prelude:../romance + +concrete SwadeshLexFre of SwadeshLex = CategoriesFre + ** open StructuralFre, RulesFre, SyntaxFre, ParadigmsFre, VerbsFre, + BasicFre, Prelude in { + + lin + + -- Pronouns + + i_NP = i_NP ; + thou_NP = thou_NP ; + he_NP = he_NP ; + we_NP = we_NP ; + you_NP = you_NP ; + they_NP = they_NP ; + who8many_IP = who8many_IP ; + who8one_IP = who8one_IP ; + what8many_IP = what8many_IP ; + what8one_IP = what8one_IP ; + + -- Determiners + + this_Det = this_Det ; + that_Det = that_Det ; + all_NDet = all_NDet ; + many_Det = many_Det ; + some_Det = some_Det ; + few_Det = mkDeterminer1 Pl ("peu" ++ elisDe) ; + other_Det = mkDeterminer1 Pl ["d'autres"] ; + + + -- Adverbs + + here_Adv = here_Adv; + there_Adv = there_Adv; + where_IAdv = where_IAdv; + when_IAdv = when_IAdv; + how_IAdv = how_IAdv; + + -- not : Adv ; -- ? + + -- Conjunctions + + and_Conj = and_Conj ; + + -- Prepositions + + at_Prep = justCase dative.p1 ; + in_Prep = StructuralFre.in_Prep ; + with_Prep = StructuralFre.with_Prep ; + + -- Numerals + + one_Num = UseNumeral (num (pot2as3 (pot1as2 (pot0as1 pot01)))) ; + two_Num = UseNumeral (num (pot2as3 (pot1as2 (pot0as1 (pot0 n2))))) ; + three_Num = UseNumeral (num (pot2as3 (pot1as2 (pot0as1 (pot0 n3))))) ; + four_Num = UseNumeral (num (pot2as3 (pot1as2 (pot0as1 (pot0 n4))))) ; + five_Num = UseNumeral (num (pot2as3 (pot1as2 (pot0as1 (pot0 n5))))) ; + + -- Adjectives + + bad_ADeg = bad_ADeg ; + big_ADeg = big_ADeg ; + black_ADeg = black_ADeg ; + cold_ADeg = cold_ADeg ; + correct_ADeg = regADeg "correct" ; + dirty_ADeg = dirty_ADeg ; + dry_ADeg = compADeg (mkA "sec" "sèche" "secs" "sèches") ; + dull_ADeg = regADeg "émoussé" ; + far_ADeg = regADeg "lointain" ; + full_ADeg = regADeg "plein" ; + good_ADeg = good_ADeg ; + green_ADeg = green_ADeg ; + heavy_ADeg = regADeg "lourd" ; + long_ADeg = long_ADeg ; + narrow_ADeg = narrow_ADeg ; + near_ADeg = regADeg "proche" ; + new_ADeg = new_ADeg ; + old_ADeg = old_ADeg ; + red_ADeg = red_ADeg ; + rotten_ADeg = regADeg "pourri" ; + round_ADeg = regADeg "rond" ; + sharp_ADeg = regADeg "tranchant" ; + short_ADeg = short_ADeg ; + small_ADeg = small_ADeg ; + smooth_ADeg = regADeg "lisse" ; + straight_ADeg = regADeg "droite" ; + thick_ADeg = thick_ADeg ; + thin_ADeg = thin_ADeg ; + warm_ADeg = warm_ADeg ; + wet_ADeg = regADeg "mouillé" ; + white_ADeg = white_ADeg ; + wide_ADeg = regADeg "large" ; + yellow_ADeg = yellow_ADeg ; + + left_A = regA "gauche" ; + right_A = regA "droite" ; + + -- Nouns + + animal_N = regN "animal" masculine ; + ashes_N = regN "cendre" masculine ; + back_N = regN "dos" masculine ; + bark_N = regN "écorce" feminine ; + belly_N = regN "ventre" masculine ; + bird_N = bird_N; + blood_N = regN "sang" masculine ; + bone_N = regN "os" masculine ; + breast_N = regN "sein" masculine ; --- poitrine + child_N = child_N ; + cloud_N = regN "nuage" masculine ; + day_N = regN "jour" masculine ; + dog_N = dog_N ; + dust_N = regN "poussière" feminine ; + ear_N = regN "oreille" feminine ; + earth_N = regN "terre" feminine ; + egg_N = regN "oeuf" masculine ; + eye_N = mkN "oeil" "yeux" masculine ; + fat_N = regN "graisse" feminine ; + father_N = UseN2 father_N2 ; + feather_N = regN "plume" feminine ; + fingernail_N = regN "ongle" masculine ; + fire_N = regN "feu" masculine ; + fish_N = fish_N ; + flower_N = regN "fleur" feminine ; + fog_N = regN "brouillard" masculine ; + foot_N = regN "pied" masculine ; + forest_N = regN "forêt" feminine ; + fruit_N = fruit_N ; + grass_N = regN "herbe" feminine ; + guts_N = regN "entraille" feminine ; + hair_N = regN "cheveu" masculine ; + hand_N = regN "main" masculine ; + head_N = regN "tête" feminine ; + heart_N = regN "coeur" masculine ; + horn_N = regN "corne" masculine ; + husband_N = regN "mari" masculine ; + ice_N = regN "glace" feminine ; + knee_N = regN "genou" masculine ; + lake_N = lake_N ; + leaf_N = regN "feuille" feminine ; + leg_N = regN "jambe" feminine ; + liver_N = regN "foie" masculine ; + louse_N = regN "pou" masculine ; + man_N = man_N ; + meat_N = meat_N ; + moon_N = moon_N ; + mother_N = UseN2 mother_N2 ; + mountain_N = mountain_N ; + mouth_N = regN "bouche" masculine ; + name_N = regN "nom" masculine ; + neck_N = mkN "cou" "cous" masculine ; + night_N = regN "nuit" feminine ; + nose_N = regN "nez" masculine ; + person_N = regN "personne" feminine ; + rain_N = regN "pluie" feminine ; + river_N = river_N ; + road_N = regN "route" feminine ; + root_N = regN "racine" feminine ; + rope_N = regN "corde" feminine ; + salt_N = regN "sel" masculine ; + sand_N = regN "sable" masculine ; + sea_N = sea_N ; + seed_N = regN "graine" masculine ; + skin_N = regN "peau" masculine ; + sky_N = mkN "ciel" "cieux" masculine ; + smoke_N = regN "fumée" feminine ; + snake_N = snake_N ; + snow_N = regN "neige" feminine ; + star_N = star_N ; + stick_N = regN "bâton" masculine ; + stone_N = stone_N ; + sun_N = sun_N ; + tail_N = regN "queue" feminine ; + tongue_N = regN "langue" feminine ; + tooth_N = regN "dent" feminine ; + tree_N = tree_N ; + water_N = water_N ; + wife_N = regN "femme" feminine ; + wind_N = regN "vent" masculine ; + wing_N = regN "aile" feminine ; + woman_N = woman_N ; + worm_N = regN "ver" masculine ; + year_N = regN "an" masculine ; --- année + + -- Verbs + + bite_V = UseV2 mordre_V2 ; + blow_V = regV "souffler" ; + breathe_V = regV "respirer" ; + burn_V = regV "brûler" ; + come_V = venir_V ; + count_V = regV "conter" ; + cut_V = regV "tailler" ; + die_V = mourir_V ; + dig_V = regV "creuser" ; + drink_V = UseV2 boire_V2 ; + eat_V = regV "manger" ; + fall_V = regV "tomber" ; + fear_V = UseV2 craindre_V2 ; + fight_V = regV "lutter" ; + float_V = regV "flotter" ; + flow_V = regV "couler" ; + fly_V = regV "voler" ; + freeze_V = regV "geler" ; ---- check conjugation + give_V = regV "donner" ; + hear_V = UseV2 entendre_V2 ; + hit_V = regV "frapper" ; + hold_V = UseV2 tenir_V2 ; + hunt_V = regV "chasser" ; + kill_V = regV "tuer" ; + know_V = UseV2 savoir_V2 ; --- connaître + laugh_V = UseV2 rire_V2 ; + lie_V = UseV2 étendre_V2 ; ---- reflexive + live_V = UseV2 vivre_V2 ; + play_V = regV "jouer" ; + pull_V = regV "tirer" ; + push_V = regV "pousser" ; + rub_V = regV "frotter" ; + say_V = UseV2 dire_V2 ; + scratch_V = regV "gratter" ; + see_V = UseV2 voir_V2 ; + sew_V = regV "semer"; ---- conjug + sing_V = regV "chanter" ; + sit_V = UseV2 asseoir_V2 ; --- refl + sleep_V = UseV2 dormir_V2 ; + smell_V = UseV2 sentir_V2 ; + spit_V = regV "cracher" ; + split_V = UseV2 fendre_V2 ; + squeeze_V = regV "squeeze" ; + stab_V = regV "serrer" ; + stand_V = regV "lever" ; ---- refl ---- + suck_V = regV "sucer" ; + swell_V = regV "gonfler" ; + swim_V = regV "nager" ; + think_V = regV "penser" ; + throw_V = regV "jeter" ; + tie_V = regV "lier" ; + turn_V = regV "tourner" ; + vomit_V = regV "vomir" ; + walk_V = regV "marcher" ; + wash_V = regV "laver" ; + wipe_V = regV "essuyer" ; + +} \ No newline at end of file diff --git a/lib/resource/romance/RulesRomance.gf b/lib/resource/romance/RulesRomance.gf index efbc346ef..3557016af 100644 --- a/lib/resource/romance/RulesRomance.gf +++ b/lib/resource/romance/RulesRomance.gf @@ -85,7 +85,7 @@ lin -- Adverbs. AdjAdv a = {s = a.s ! AA} ; - AdvVP = adVerbPhrase ; +---- AdvVP = adVerbPhrase ; AdvPP p = p ; PrepNP = prepNounPhrase ; diff --git a/lib/resource/romance/SyntaxRomance.gf b/lib/resource/romance/SyntaxRomance.gf index 5dffa42d1..7f1f209a4 100644 --- a/lib/resource/romance/SyntaxRomance.gf +++ b/lib/resource/romance/SyntaxRomance.gf @@ -1411,4 +1411,125 @@ oper siSubj, quandSubj : Subjunction ; ouiPhr, noPhr : Utterance ; + +--------------------------------------------------------------------- +---- for Sats; to be moved earlier + + Sats : Type = { + s1 : Str ; -- je je + s3 : Str ; -- (ne) le lui (ne) + s4 : VF => Str ; -- ai ai + s5 : Str ; -- toujours (pas) toujours (pas) + s6 : Str ; -- (dit) directement (voulu) le lui dire directement + aux : VAux ; + g,g2 : Gender ; -- features for main verb and participle + n,n2 : Number ; + p : Person -- feature of subject + + } ; + + verbClForm : + Verb -> ClForm -> Gender -> Number -> Person -> Gender -> Number -> (Str * Str) = + \verb,cl,g,n,p,g2,n2 -> + let + aimee = verb.s ! VPart g2 n2 ; + auxv = (auxVerb verb).s ; + aime : TMode -> Str = \t -> verb.s ! (VFin t n p) ; + avoir : TMode -> Str = \t -> auxv ! (VFin t n p) ; + aimer = verb.s ! VInfin ; + avoirr = auxv ! VInfin + in + case cl of { + ClPres Simul m => ; + ClPres a m => ; + ClImperf Simul m => ; + ClImperf a m => ; + ClPasse Simul => ; + ClPasse a => ; + ClFut Simul => ; + ClFut a => ; + ClCondit Simul => ; + ClCondit a => ; + ClInfinit Simul => ; + ClInfinit a => + } ; + + mkSats : NounPhrase -> Verb -> Sats = \subj,verb -> + let ifEsse : (T : Type) -> T -> T -> T = \T,e,h -> + case verb.aux of { + AEsse => e ; + AHabere => h + } + in + {s1 = subj.s ! unstressed nominative ; + s3 = [] ; + s4 = verb.s ; + s5, s6 = [] ; + aux = verb.aux ; + g = pgen2gen subj.g ; + n = subj.n ; + p = subj.p ; + g2 = ifEsse Gender (pgen2gen subj.g) Masc ; + n2 = ifEsse Number subj.n Sg + } ; + + insertObject : Sats -> CaseA -> Str -> NounPhrase -> Sats = \sats, c, prep, obj -> + let + ifClit : (T : Type) -> T -> T -> T = + \T -> if_then_else T (andB (isNounPhraseClit obj) (isClitCase c)) ; + object = obj.s ! (case2pformClit c) ; + clit = ifClit Str object [] ; + np = ifClit Str [] object + in + {s1 = sats.s1 ; + s3 = sats.s3 ++ clit ; ---- or clit ++ s3, dep. on clits + s4 = sats.s4 ; + s5 = sats.s5 ; + s6 = sats.s6 ++ prep ++ np ; + aux = sats.aux ; + g = sats.g ; + n = sats.n ; + g2 = ifClit Gender (pgen2gen obj.g) sats.g2 ; ---- only for clit acc + n2 = ifClit Number obj.n sats.n2 ; + p = sats.p + } ; + + insertExtrapos : Sats -> Str -> Sats = \sats,obj -> + {s1 = sats.s1 ; + s3 = sats.s3 ; + s4 = sats.s4 ; + s5 = sats.s5 ; + s6 = sats.s6 ++ obj ; + aux = sats.aux ; + g = sats.g ; + n = sats.n ; + g2 = sats.g2 ; + n2 = sats.n2 ; + p = sats.p + } ; + + mkSatsObject : NounPhrase -> TransVerb -> NounPhrase -> Sats = \subj,verb,obj -> + insertObject (mkSats subj verb) verb.c verb.s2 obj ; + + mkSatsCopula : NounPhrase -> Str -> Sats = \subj,obj -> + mkSatsObject subj + (mkTransVerbDir copula) --- hack to reuse + (nameNounPhrase (mkProperName obj Masc)) ; --- this function + + sats2clause : Sats -> Clause = + \sats -> {s = \\b,cf => + let + je = sats.s1 ; + lui = sats.s3 ; + dire = verbClForm {s = sats.s4 ; aux = sats.aux} + cf sats.g sats.n sats.p sats.g2 sats.n2 ; + ai = dire.p1 ; + dit = dire.p2 ; + toujours = sats.s5 ; + directement = sats.s6 + in + je ++ lui ++ ai ++ toujours ++ dit ++ directement + } ; + + }