diff --git a/lib/src/Makefile b/lib/src/Makefile index 156a1be38..9f031f8dc 100644 --- a/lib/src/Makefile +++ b/lib/src/Makefile @@ -133,6 +133,7 @@ TranslateEng: TranslateEng.pgf TranslateBul: TranslateBul.pgf TranslateChi: TranslateChi.pgf TranslateGer: TranslateGer.pgf +TranslateDut: TranslateDut.pgf TranslateSwe: TranslateSwe.pgf TranslateHin: TranslateHin.pgf TranslateFin: TranslateFin.pgf @@ -146,6 +147,8 @@ GFMKT=mkdir -p ../translator && gf $S -make -literal=Symb -probs=$(TPROBSFILE) - TRANSLATE8=TranslateEng.pgf TranslateBul.pgf TranslateChi.pgf TranslateGer.pgf TranslateSwe.pgf TranslateHin.pgf TranslateFin.pgf TranslateFre.pgf TRANSLATE10=TranslateEng.pgf TranslateBul.pgf TranslateChi.pgf TranslateGer.pgf TranslateSwe.pgf TranslateHin.pgf TranslateFin.pgf TranslateFre.pgf TranslateIta.pgf TranslateSpa.pgf +TRANSLATE11=$(TRANSLATE10) TranslateDut.pgf + # Without dependencies: Translate10: $(GFMKT) -name=Translate10 $(TRANSLATE10) +RTS -K32M @@ -154,6 +157,14 @@ Translate10: Translate10.pgf: $(TRANSLATE10) $(GFMKT) -name=Translate10 $(TRANSLATE10) +RTS -K32M +# Without dependencies: +Translate11: + $(GFMKT) -name=Translate11 $(TRANSLATE11) +RTS -K32M + +# With dependencies: +Translate11.pgf: $(TRANSLATE10) + $(GFMKT) -name=Translate11 $(TRANSLATE11) +RTS -K32M + # Without dependencies: Translate8: $(GFMKT) -name=Translate8 $(TRANSLATE8) +RTS -K32M @@ -168,6 +179,7 @@ TranslateBul.pgf:: ; $(GFMKT) -name=TranslateBul translator/TranslateBul.gf TranslateChi.pgf:: ; $(GFMKT) -name=TranslateChi translator/TranslateChi.gf +RTS -K64M TranslateFin.pgf:: ; $(GFMKT) -name=TranslateFin translator/TranslateFin.gf +RTS -K64M TranslateGer.pgf:: ; $(GFMKT) -name=TranslateGer translator/TranslateGer.gf +TranslateDut.pgf:: ; $(GFMKT) -name=TranslateDut translator/TranslateDut.gf TranslateHin.pgf:: ; $(GFMKT) -name=TranslateHin translator/TranslateHin.gf TranslateFre.pgf:: ; $(GFMKT) -name=TranslateFre translator/TranslateFre.gf +RTS -K64M TranslateSwe.pgf:: ; $(GFMKT) -name=TranslateSwe translator/TranslateSwe.gf diff --git a/lib/src/chunk/ChunkDut.gf b/lib/src/chunk/ChunkDut.gf new file mode 100644 index 000000000..aa2cf1656 --- /dev/null +++ b/lib/src/chunk/ChunkDut.gf @@ -0,0 +1,43 @@ +concrete ChunkDut of Chunk = CatDut +---- , ExtensionsDut + ** + ChunkFunctor - [UseVC, VPS_Chunk, emptyNP, VPI_Chunk] + with (Syntax = SyntaxDut), (Extensions = ExtensionsDut) + ** + open + SyntaxDut, (E = ExtensionsDut), Prelude, + ResDut, (P = ParadigmsDut) in { + + oper + emptyNP = SyntaxDut.mkNP (P.mkPN []) ; + +----lin +---- NP_Acc_Chunk np = ss (np.s ! NPC Acc) ; +---- NP_Gen_Chunk np = ss (np.s ! NPC Gen) ; + +---- VPI_Chunk vpi = {s = vpi.s ! (True | False)} ; + +lin + copula_inf_Chunk = ss "zijn" ; + + refl_SgP1_Chunk = ss "mij zelf" ; + refl_SgP2_Chunk = ss "jij zelf" ; + refl_SgP3_Chunk = ss "zij zelf" ; + refl_PlP1_Chunk = ss "ons zelf" ; + refl_PlP2_Chunk = ss "jullie zelf" ; + refl_PlP3_Chunk = ss "zij zelf" ; + neg_Chunk = ss "niet" ; + copula_Chunk = ss "is" ; + copula_neg_Chunk = ss "is niet" ; + past_copula_Chunk = ss "was" ; + past_copula_neg_Chunk = ss "was niet" ; + future_Chunk = ss "zal" ; + future_neg_Chunk = ss "zal niet" ; + cond_Chunk = ss "zou" ; + cond_neg_Chunk = ss "zou niet" ; + perfect_Chunk = ss "heeft" ; + perfect_neg_Chunk = ss "heeft niet" ; + past_perfect_Chunk = ss "had" ; + past_perfect_neg_Chunk = ss "had niet" ; + +} \ No newline at end of file diff --git a/lib/src/chunk/ChunkFunctor.gf b/lib/src/chunk/ChunkFunctor.gf index a73b5038c..395785a5f 100644 --- a/lib/src/chunk/ChunkFunctor.gf +++ b/lib/src/chunk/ChunkFunctor.gf @@ -24,7 +24,7 @@ lin S_Chunk s = mkUtt s ; SSlash_Chunk s = mkUtt ; QS_Chunk qs = mkUtt qs ; - CN_Pl_Chunk cn = mkUtt (mkNP aPl_Det cn) ; + CN_Pl_Chunk cn = mkUtt (Syntax.mkNP aPl_Det cn) ; CN_Sg_Chunk cn = mkUtt cn ; ---- CN_Pl_Gen_Chunk cn = ss (cn.s ! Pl ! Gen) ; ---- CN_Sg_Gen_Chunk cn = ss (cn.s ! Sg ! Gen) ; @@ -34,11 +34,11 @@ lin NP_Nom_Chunk np = mkUtt np ; ---- NP_Acc_Chunk np = ss (np.s ! NPAcc) ; ---- NP_Gen_Chunk np = ss (np.s ! NCase Gen) | ss (np.s ! NPNomPoss) ; - Numeral_Nom_Chunk num = mkUtt (mkNP (mkDet num)) ; + Numeral_Nom_Chunk num = mkUtt (Syntax.mkNP (Syntax.mkDet num)) ; ---- Numeral_Gen_Chunk num = ss (num.s ! NCard ! Gen) ; ---- Ord_Nom_Chunk ord = ss (ord.s ! Nom) ; ---- Ord_Gen_Chunk ord = ss (ord.s ! Gen) ; - Predet_Chunk predet = mkUtt (mkNP predet emptyNP) ; + Predet_Chunk predet = mkUtt (Syntax.mkNP predet emptyNP) ; Prep_Chunk prep = mkAdv prep emptyNP ; ---- ---- RP_Nom_Chunk rp = ss (rp.s ! RC Neutr (NCase Nom)) ; ---- RP_Acc_Chunk rp = ss (rp.s ! RPrep Masc) ; ---- diff --git a/lib/src/translator/DictionaryDut.gf b/lib/src/translator/DictionaryDut.gf new file mode 100644 index 000000000..f77301bb0 --- /dev/null +++ b/lib/src/translator/DictionaryDut.gf @@ -0,0 +1,446 @@ +concrete DictionaryDut of Dictionary = CatDut +** open ParadigmsDut, MorphoDut, IrregDut, (L=LexiconDut), (S=StructuralDut), Prelude in { + +lin add_V3 = L.add_V3 ; +lin airplane_N = L.airplane_N ; +lin already_Adv = L.already_Adv ; +lin animal_N = L.animal_N ; +lin answer_V2S = L.answer_V2S ; +lin apartment_N = L.apartment_N ; +lin apple_N = L.apple_N ; +lin art_N = L.art_N ; +lin ashes_N = L.ashes_N ; +lin ask_V2Q = L.ask_V2Q ; +lin baby_N = L.baby_N ; +lin back_N = L.back_N ; +lin bad_A = L.bad_A ; +lin bank_N = L.bank_N ; +lin bark_N = L.bark_N ; +lin beautiful_A = L.beautiful_A ; +lin become_VA = L.become_VA ; +lin beer_N = L.beer_N ; +lin beg_V2V = L.beg_V2V ; +lin belly_N = L.belly_N ; +lin big_A = L.big_A ; +lin bike_N = L.bike_N ; +lin bird_N = L.bird_N ; +lin bite_V2 = L.bite_V2 ; +lin black_A = L.black_A ; +lin blood_N = L.blood_N ; +lin blow_V = L.blow_V ; +lin blue_A = L.blue_A ; +lin boat_N = L.boat_N ; +lin bone_N = L.bone_N ; +lin book_N = L.book_N ; +lin boot_N = L.boot_N ; +lin boss_N = L.boss_N ; +lin boy_N = L.boy_N ; +lin bread_N = L.bread_N ; +lin break_V2 = L.break_V2 ; +lin breast_N = L.breast_N ; +lin breathe_V = L.breathe_V ; +lin broad_A = L.broad_A ; +lin brother_N2 = L.brother_N2 ; +lin brown_A = L.brown_A ; +lin burn_V = L.burn_V ; +lin butter_N = L.butter_N ; +lin buy_V2 = L.buy_V2 ; +lin camera_N = L.camera_N ; +lin cap_N = L.cap_N ; +lin car_N = L.car_N ; +lin carpet_N = L.carpet_N ; +lin cat_N = L.cat_N ; +lin ceiling_N = L.ceiling_N ; +lin chair_N = L.chair_N ; +lin cheese_N = L.cheese_N ; +lin child_N = L.child_N ; +lin church_N = L.church_N ; +lin city_N = L.city_N ; +lin clean_A = L.clean_A ; +lin clever_A = L.clever_A ; +lin close_V2 = L.close_V2 ; +lin cloud_N = L.cloud_N ; +lin coat_N = L.coat_N ; +lin cold_A = L.cold_A ; +lin come_V = L.come_V ; +lin computer_N = L.computer_N ; +lin correct_A = L.correct_A ; +lin count_V2 = L.count_V2 ; +lin country_N = L.country_N ; +lin cousin_N = L.cousin_N ; +lin cow_N = L.cow_N ; +lin cut_V2 = L.cut_V2 ; +lin day_N = L.day_N ; +lin die_V = L.die_V ; +lin dig_V = L.dig_V ; +lin dirty_A = L.dirty_A ; +lin distance_N3 = L.distance_N3 ; +lin doctor_N = L.doctor_N ; +lin dog_N = L.dog_N ; +lin door_N = L.door_N ; +lin drink_V2 = L.drink_V2 ; +lin dry_A = L.dry_A ; +lin dull_A = L.dull_A ; +lin dust_N = L.dust_N ; +lin ear_N = L.ear_N ; +lin earth_N = L.earth_N ; +lin easy_A2V = L.easy_A2V ; +lin eat_V2 = L.eat_V2 ; +lin egg_N = L.egg_N ; +lin empty_A = L.empty_A ; +lin enemy_N = L.enemy_N ; +lin eye_N = L.eye_N ; +lin factory_N = L.factory_N ; +lin far_Adv = L.far_Adv ; +lin fat_N = L.fat_N ; +lin father_N2 = L.father_N2 ; +lin fear_V2 = L.fear_V2 ; +lin fear_VS = L.fear_VS ; +lin feather_N = L.feather_N ; +lin fight_V2 = L.fight_V2 ; +lin find_V2 = L.find_V2 ; +lin fingernail_N = L.fingernail_N ; +lin fire_N = L.fire_N ; +lin fish_N = L.fish_N ; +lin float_V = L.float_V ; +lin floor_N = L.floor_N ; +lin flow_V = L.flow_V ; +lin flower_N = L.flower_N ; +lin fly_V = L.fly_V ; +lin fog_N = L.fog_N ; +lin foot_N = L.foot_N ; +lin forget_V2 = L.forget_V2 ; +lin freeze_V = L.freeze_V ; +lin fridge_N = L.fridge_N ; +lin friend_N = L.friend_N ; +lin fruit_N = L.fruit_N ; +lin full_A = L.full_A ; +lin fun_AV = L.fun_AV ; +lin garden_N = L.garden_N ; +lin girl_N = L.girl_N ; +lin give_V3 = L.give_V3 ; +lin glove_N = L.glove_N ; +lin go_V = L.go_V ; +lin gold_N = L.gold_N ; +lin grammar_N = L.grammar_N ; +lin grass_N = L.grass_N ; +lin green_A = L.green_A ; +lin guts_N = L.guts_N ; +lin hair_N = L.hair_N ; +lin hand_N = L.hand_N ; +lin harbour_N = L.harbour_N ; +lin hat_N = L.hat_N ; +lin hate_V2 = L.hate_V2 ; +lin head_N = L.head_N ; +lin hear_V2 = L.hear_V2 ; +lin heart_N = L.heart_N ; +lin heavy_A = L.heavy_A ; +lin hill_N = L.hill_N ; +lin hit_V2 = L.hit_V2 ; +lin hold_V2 = L.hold_V2 ; +lin hope_VS = L.hope_VS ; +lin horn_N = L.horn_N ; +lin horse_N = L.horse_N ; +lin hot_A = L.hot_A ; +lin house_N = L.house_N ; +lin hunt_V2 = L.hunt_V2 ; +lin husband_N = L.husband_N ; +lin ice_N = L.ice_N ; +lin important_A = L.important_A ; +lin industry_N = L.industry_N ; +lin iron_N = L.iron_N ; +lin john_PN = L.john_PN ; +lin jump_V = L.jump_V ; +lin kill_V2 = L.kill_V2 ; +lin king_N = L.king_N ; +lin knee_N = L.knee_N ; +lin know_V2 = L.know_V2 ; +lin know_VQ = L.know_VQ ; +lin know_VS = L.know_VS ; +lin lake_N = L.lake_N ; +lin lamp_N = L.lamp_N ; +lin language_N = L.language_N ; +lin laugh_V = L.laugh_V ; +lin leaf_N = L.leaf_N ; +lin learn_V2 = L.learn_V2 ; +lin leather_N = L.leather_N ; +lin leave_V2 = L.leave_V2 ; +lin left_Ord = L.left_Ord ; +lin leg_N = L.leg_N ; +lin lie_V = L.lie_V ; +lin like_V2 = L.like_V2 ; +lin listen_V2 = L.listen_V2 ; +lin live_V = L.live_V ; +lin liver_N = L.liver_N ; +lin long_A = L.long_A ; +lin lose_V2 = L.lose_V2 ; +lin louse_N = L.louse_N ; +lin love_N = L.love_N ; +lin love_V2 = L.love_V2 ; +lin man_N = L.man_N ; +lin married_A2 = L.married_A2 ; +lin meat_N = L.meat_N ; +lin milk_N = L.milk_N ; +lin moon_N = L.moon_N ; +lin mother_N2 = L.mother_N2 ; +lin mountain_N = L.mountain_N ; +lin mouth_N = L.mouth_N ; +lin music_N = L.music_N ; +lin name_N = L.name_N ; +lin narrow_A = L.narrow_A ; +lin near_A = L.near_A ; +lin neck_N = L.neck_N ; +lin new_A = L.new_A ; +lin newspaper_N = L.newspaper_N ; +lin night_N = L.night_N ; +lin nose_N = L.nose_N ; +lin now_Adv = L.now_Adv ; +lin number_N = L.number_N ; +lin oil_N = L.oil_N ; +lin old_A = L.old_A ; +lin open_V2 = L.open_V2 ; +lin paint_V2A = L.paint_V2A ; +lin paper_N = L.paper_N ; +lin paris_PN = L.paris_PN ; +lin peace_N = L.peace_N ; +lin pen_N = L.pen_N ; +lin person_N = L.person_N ; +lin planet_N = L.planet_N ; +lin plastic_N = L.plastic_N ; +lin play_V = L.play_V ; +lin play_V2 = L.play_V2 ; +lin policeman_N = L.policeman_N ; +lin priest_N = L.priest_N ; +lin probable_AS = L.probable_AS ; +lin pull_V2 = L.pull_V2 ; +lin push_V2 = L.push_V2 ; +lin put_V2 = L.put_V2 ; +lin queen_N = L.queen_N ; +lin question_N = L.question_N ; +lin radio_N = L.radio_N ; +lin rain_N = L.rain_N ; +lin rain_V0 = L.rain_V0 ; +lin read_V2 = L.read_V2 ; +lin reason_N = L.reason_N ; +lin red_A = L.red_A ; +lin religion_N = L.religion_N ; +lin restaurant_N = L.restaurant_N ; +lin right_Ord = L.right_Ord ; +lin river_N = L.river_N ; +lin road_N = L.road_N ; +lin rock_N = L.rock_N ; +lin roof_N = L.roof_N ; +lin root_N = L.root_N ; +lin rope_N = L.rope_N ; +lin rotten_A = L.rotten_A ; +lin round_A = L.round_A ; +lin rub_V2 = L.rub_V2 ; +lin rubber_N = L.rubber_N ; +lin rule_N = L.rule_N ; +lin run_V = L.run_V ; +lin salt_N = L.salt_N ; +lin sand_N = L.sand_N ; +lin say_VS = L.say_VS ; +lin school_N = L.school_N ; +lin science_N = L.science_N ; +lin scratch_V2 = L.scratch_V2 ; +lin sea_N = L.sea_N ; +lin see_V2 = L.see_V2 ; +lin seed_N = L.seed_N ; +lin seek_V2 = L.seek_V2 ; +lin sell_V3 = L.sell_V3 ; +lin send_V3 = L.send_V3 ; +lin sew_V = L.sew_V ; +lin sharp_A = L.sharp_A ; +lin sheep_N = L.sheep_N ; +lin ship_N = L.ship_N ; +lin shirt_N = L.shirt_N ; +lin shoe_N = L.shoe_N ; +lin shop_N = L.shop_N ; +lin short_A = L.short_A ; +lin silver_N = L.silver_N ; +lin sing_V = L.sing_V ; +lin sister_N = L.sister_N ; +lin sit_V = L.sit_V ; +lin skin_N = L.skin_N ; +lin sky_N = L.sky_N ; +lin sleep_V = L.sleep_V ; +lin small_A = L.small_A ; +lin smell_V = L.smell_V ; +lin smoke_N = L.smoke_N ; +lin smooth_A = L.smooth_A ; +lin snake_N = L.snake_N ; +lin snow_N = L.snow_N ; +lin sock_N = L.sock_N ; +lin song_N = L.song_N ; +lin speak_V2 = L.speak_V2 ; +lin spit_V = L.spit_V ; +lin split_V2 = L.split_V2 ; +lin squeeze_V2 = L.squeeze_V2 ; +lin stab_V2 = L.stab_V2 ; +lin stand_V = L.stand_V ; +lin star_N = L.star_N ; +lin steel_N = L.steel_N ; +lin stick_N = L.stick_N ; +lin stone_N = L.stone_N ; +lin stop_V = L.stop_V ; +lin stove_N = L.stove_N ; +lin straight_A = L.straight_A ; +lin student_N = L.student_N ; +lin stupid_A = L.stupid_A ; +lin suck_V2 = L.suck_V2 ; +lin sun_N = L.sun_N ; +lin swell_V = L.swell_V ; +lin swim_V = L.swim_V ; +lin switch8off_V2 = L.switch8off_V2 ; +lin switch8on_V2 = L.switch8on_V2 ; +lin table_N = L.table_N ; +lin tail_N = L.tail_N ; +lin talk_V3 = L.talk_V3 ; +lin teach_V2 = L.teach_V2 ; +lin teacher_N = L.teacher_N ; +lin television_N = L.television_N ; +lin thick_A = L.thick_A ; +lin thin_A = L.thin_A ; +lin think_V = L.think_V ; +lin throw_V2 = L.throw_V2 ; +lin tie_V2 = L.tie_V2 ; +lin today_Adv = L.today_Adv ; +lin tongue_N = L.tongue_N ; +lin tooth_N = L.tooth_N ; +lin train_N = L.train_N ; +lin travel_V = L.travel_V ; +lin tree_N = L.tree_N ; +lin turn_V = L.turn_V ; +lin ugly_A = L.ugly_A ; +lin understand_V2 = L.understand_V2 ; +lin university_N = L.university_N ; +lin village_N = L.village_N ; +lin vomit_V = L.vomit_V ; +lin wait_V2 = L.wait_V2 ; +lin walk_V = L.walk_V ; +lin war_N = L.war_N ; +lin warm_A = L.warm_A ; +lin wash_V2 = L.wash_V2 ; +lin watch_V2 = L.watch_V2 ; +lin water_N = L.water_N ; +lin wet_A = L.wet_A ; +lin white_A = L.white_A ; +lin wide_A = L.wide_A ; +lin wife_N = L.wife_N ; +lin win_V2 = L.win_V2 ; +lin wind_N = L.wind_N ; +lin window_N = L.window_N ; +lin wine_N = L.wine_N ; +lin wing_N = L.wing_N ; +lin wipe_V2 = L.wipe_V2 ; +lin woman_N = L.woman_N ; +lin wonder_VQ = L.wonder_VQ ; +lin wood_N = L.wood_N ; +lin worm_N = L.worm_N ; +lin write_V2 = L.write_V2 ; +lin year_N = L.year_N ; +lin yellow_A = L.yellow_A ; +lin young_A = L.young_A ; +lin above_Prep = S.above_Prep ; +lin after_Prep = S.after_Prep ; +lin all_Predet = S.all_Predet ; +lin almost_AdA = S.almost_AdA ; +lin almost_AdN = S.almost_AdN ; +lin although_Subj = S.although_Subj ; +lin always_AdV = S.always_AdV ; +lin and_Conj = S.and_Conj ; +lin as_CAdv = S.as_CAdv ; +lin at_least_AdN = S.at_least_AdN ; +lin at_most_AdN = S.at_most_AdN ; +lin because_Subj = S.because_Subj ; +lin before_Prep = S.before_Prep ; +lin behind_Prep = S.behind_Prep ; +lin between_Prep = S.between_Prep ; +lin both7and_DConj = S.both7and_DConj ; +lin but_PConj = S.but_PConj ; +lin by8agent_Prep = S.by8agent_Prep ; +lin by8means_Prep = S.by8means_Prep ; +lin can8know_VV = S.can8know_VV ; +lin can_1_VV = S.can_VV ; +lin can_2_VV = S.can8know_VV ; +lin during_Prep = S.during_Prep ; +lin either7or_DConj = S.either7or_DConj ; +lin every_Det = S.every_Det ; +lin everybody_NP = S.everybody_NP ; +lin everything_NP = S.everything_NP ; +lin everywhere_Adv = S.everywhere_Adv ; +lin except_Prep = S.except_Prep ; +lin few_Det = S.few_Det ; +lin for_Prep = S.for_Prep ; +lin from_Prep = S.from_Prep ; +lin have_V2 = S.have_V2 ; +lin he_Pron = S.he_Pron ; +lin here7from_Adv = S.here7from_Adv ; +lin here7to_Adv = S.here7to_Adv ; +lin how8many_IDet = S.how8many_IDet ; +lin how8much_IAdv = S.how8much_IAdv ; +lin how_IAdv = S.how_IAdv ; +lin i_Pron = S.i_Pron ; +lin if_Subj = S.if_Subj ; +lin if_then_Conj = S.if_then_Conj ; +lin in8front_Prep = S.in8front_Prep ; +lin in_Prep = S.in_Prep ; +lin it_Pron = S.it_Pron ; +lin less_CAdv = S.less_CAdv ; +lin many_Det = S.many_Det ; +lin more_CAdv = S.more_CAdv ; +lin most_Predet = S.most_Predet ; +lin much_Det = S.much_Det ; +lin must_VV = S.must_VV ; +lin no_Quant = S.no_Quant ; +lin no_Utt = S.no_Utt ; +lin nobody_NP = S.nobody_NP ; +lin not_Predet = S.not_Predet ; +lin nothing_NP = S.nothing_NP ; +lin on_Prep = S.on_Prep ; +lin only_Predet = S.only_Predet ; +lin or_Conj = S.or_Conj ; +lin otherwise_PConj = S.otherwise_PConj ; +lin part_Prep = S.part_Prep ; +lin please_Voc = S.please_Voc ; +lin possess_Prep = S.possess_Prep ; +lin quite_Adv = S.quite_Adv ; +lin she_Pron = S.she_Pron ; +lin so_AdA = S.so_AdA ; +lin somePl_Det = S.somePl_Det ; +lin someSg_Det = S.someSg_Det ; +lin somebody_NP = S.somebody_NP ; +lin something_NP = S.something_NP ; +lin somewhere_Adv = S.somewhere_Adv ; +lin that_Quant = S.that_Quant ; +lin that_Subj = S.that_Subj ; +lin there7from_Adv = S.there7from_Adv ; +lin there7to_Adv = S.there7to_Adv ; +lin there_Adv = S.there_Adv ; +lin therefore_PConj = S.therefore_PConj ; +lin they_Pron = S.they_Pron ; +lin this_Quant = S.this_Quant ; +lin through_Prep = S.through_Prep ; +lin to_Prep = S.to_Prep ; +lin too_AdA = S.too_AdA ; +lin under_Prep = S.under_Prep ; +lin very_AdA = S.very_AdA ; +lin want_VV = S.want_VV ; +lin we_Pron = S.we_Pron ; +lin whatPl_IP = S.whatPl_IP ; +lin whatSg_IP = S.whatSg_IP ; +lin when_IAdv = S.when_IAdv ; +lin when_Subj = S.when_Subj ; +lin where_IAdv = S.where_IAdv ; +lin which_IQuant = S.which_IQuant ; +lin whoPl_IP = S.whoPl_IP ; +lin whoSg_IP = S.whoSg_IP ; +lin why_IAdv = S.why_IAdv ; +lin with_Prep = S.with_Prep ; +lin without_Prep = S.without_Prep ; +lin yes_Utt = S.yes_Utt ; +lin youPl_Pron = S.youPl_Pron ; +lin youPol_Pron = S.youPol_Pron ; +lin youSg_Pron = S.youSg_Pron ; +} diff --git a/lib/src/translator/ExtensionsDut.gf b/lib/src/translator/ExtensionsDut.gf new file mode 100644 index 000000000..0dc85c8c0 --- /dev/null +++ b/lib/src/translator/ExtensionsDut.gf @@ -0,0 +1,120 @@ +--# -path=.:../abstract + +concrete ExtensionsDut of Extensions = + CatDut ** open MorphoDut, ResDut, ParadigmsDut, SyntaxDut, (E = ExtraDut), (G = GrammarDut), Prelude in { + +flags literal=Symb ; coding = utf8 ; + +----lincat +---- VPI = E.VPI ; +---- ListVPI = E.ListVPI ; +---- VPS = E.VPS ; +---- ListVPS = E.ListVPS ; + +--- lin +---- MkVPI = E.MkVPI ; +---- ConjVPI = E.ConjVPI ; +---- ComplVPIVV = E.ComplVPIVV ; + +---- MkVPS = E.MkVPS ; +---- ConjVPS = E.ConjVPS ; +---- PredVPS = E.PredVPS ; + +---- BaseVPI = E.BaseVPI ; +---- ConsVPI = E.ConsVPI ; +---- BaseVPS = E.BaseVPS ; +---- ConsVPS = E.ConsVPS ; + +---- GenNP = E.GenNP ; +---- GenIP = E.GenIP ; +---- GenRP = E.GenRP ; + +---- PassVPSlash = E.PassVPSlash ; +---- PassAgentVPSlash = E.PassAgentVPSlash ; + +---- EmptyRelSlash = E.EmptyRelSlash ; + + +lin +{- + ComplVV v ant p vp = + let + vpi = infVP v.isAux vp + in + insertExtrapos vpi.p4 ( + insertInfExt vpi.p3 ( + insertInf vpi.p2 ( + insertObj vpi.p1 ( + predVGen v.isAux v)))) ; + + PastPartRS ant pol sl = { -- guessed by KA, some fields in sl are ignored!! + s = \\gn => let agr = agrgP3 Masc (numGenNum gn) + in sl.s.s ! VPastPart APred ++ + (sl.nn ! agr).p1 ++ (sl.nn ! agr).p2 ++ sl.a2; + c = Nom + } ; + + PresPartRS ant pol vp = { -- guessed by KA!! + s = \\gn => let agr = agrgP3 Masc (numGenNum gn) + in vp.s.s ! VPresPart APred ++ + (vp.nn ! agr).p1 ++ (vp.nn ! agr).p2; + c = Nom + } ; +-} + PredVPosv = G.PredVP; + PredVPovs = G.PredVP; +{- + CompoundCN noun cn = { + s = \\a,n,c => glue (noun.s ! Sg ! Nom) (cn.s ! a ! n ! c) ; + g = cn.g + } ; +-} + GerundN v = { -- parsing + s = \\n,c => v.s ! VInf False ; --- formalisieren, not formalisierung + g = Neutr + } ; + +{- + GerundAP v = { -- beckoning + s = \\agr => v.s ! VPresPart ; + isPre = True + } ; + + PastPartAP v = { -- broken + s = \\agr => v.s ! VPPart ; + isPre = True + } ; + + OrdCompar a = {s = \\c => a.s ! AAdj Compar c } ; -- higher + + PositAdVAdj a = {s = a.s ! AAdv} ; -- really + + UseQuantPN q pn = {s = \\c => q.s ! False ! Sg ++ pn.s ! npcase2case c ; a = agrgP3 Sg pn.g} ; -- this London + + SlashV2V v p vp = insertObjc (\\a => p.s ++ case p.p of {CPos => ""; _ => "niet"} ++ -- force not to sleep + v.c3 ++ + infVP v.typ vp a) + (predVc v) ; + + ComplPredVP np vp = { -- ? + s = \\t,a,b,o => + let + verb = vp.s ! t ! a ! b ! o ! np.a ; + compl = vp.s2 ! np.a + in + case o of { + ODir => compl ++ "," ++ np.s ! npNom ++ verb.aux ++ verb.adv ++ vp.ad ++ verb.fin ++ verb.inf ; + OQuest => verb.aux ++ compl ++ "," ++ np.s ! npNom ++ verb.adv ++ vp.ad ++ verb.fin ++ verb.inf + } + } ; +-} + CompS s = {s = \\_ => "dat" ++ s.s ! Main} ; -- S -> Comp + CompVP ant p vp = {s = \\_ => useInfVP True vp} ; -- VP -> Comp + +lin + that_RP = which_RP ; + +---- UttAdV adv = adv; + + +} diff --git a/lib/src/translator/ExtensionsGer.gf b/lib/src/translator/ExtensionsGer.gf index ecb39055e..6e4794bf2 100644 --- a/lib/src/translator/ExtensionsGer.gf +++ b/lib/src/translator/ExtensionsGer.gf @@ -90,7 +90,7 @@ lin UseQuantPN q pn = {s = \\c => q.s ! False ! Sg ++ pn.s ! npcase2case c ; a = agrgP3 Sg pn.g} ; -- this London - SlashV2V v p vp = insertObjc (\\a => p.s ++ case p.p of {CPos => ""; _ => "not"} ++ -- force not to sleep + SlashV2V v p vp = insertObjc (\\a => p.s ++ case p.p of {CPos => ""; _ => "nicht"} ++ -- force not to sleep v.c3 ++ infVP v.typ vp a) (predVc v) ; @@ -107,7 +107,7 @@ lin } } ; -} - CompS s = {s = \\_ => "that" ++ s.s ! Main} ; -- S -> Comp + CompS s = {s = \\_ => "dass" ++ s.s ! Main} ; -- S -> Comp CompVP ant p vp = {s = \\_ => useInfVP True vp} ; -- VP -> Comp lin diff --git a/lib/src/translator/TranslateDut.gf b/lib/src/translator/TranslateDut.gf new file mode 100644 index 000000000..dd7c5484f --- /dev/null +++ b/lib/src/translator/TranslateDut.gf @@ -0,0 +1,34 @@ +--# -path=.:../chunk:alltenses + +concrete TranslateDut of Translate = + TenseX, + NounDut - [PPartNP], + AdjectiveDut, + NumeralDut, + SymbolDut [ + PN, Symb, String, CN, Card, NP, MkSymb, SymbPN, CNNumNP + ], + ConjunctionDut, + VerbDut - [ + UseCopula, + PassV2 + ], + AdverbDut, + PhraseDut, + SentenceDut, + QuestionDut, + RelativeDut, + IdiomDut, +---- ConstructionDut, +---- DocumentationDut, + + ChunkDut, + ExtensionsDut [CompoundCN,AdAdV,UttAdV,ApposNP,MkVPI, MkVPS, PredVPS, PassVPSlash, PassAgentVPSlash], + + DictionaryDut ** +open MorphoDut, ResDut, ParadigmsDut, SyntaxDut, (E = ExtraDut), Prelude in { + +flags + literal=Symb ; + +} diff --git a/lib/src/translator/steps.t2t b/lib/src/translator/steps.t2t new file mode 100644 index 000000000..4db5fe052 --- /dev/null +++ b/lib/src/translator/steps.t2t @@ -0,0 +1,227 @@ +Steps for Extending RGL to a Large Scale Translation Grammar + + + +We will add Dutch to the system of big translation grammars. + +=The Translate grammar= + +This is where we are + + $ pwd + /Users/aarne/GF/lib/src/translator + +We start from files for German + + $ ls -l *Ger.gf + -rw-r--r-- 1 aarne staff 1615550 Apr 10 23:38 DictionaryGer.gf + -rw-r--r-- 1 aarne staff 3042 Jan 22 15:39 ExtensionsGer.gf + -rw-r--r-- 1 aarne staff 662 Apr 9 11:14 TranslateGer.gf + +We make copies of these ones + + $ cp -p ExtensionsGer.gf ExtensionsDut.gf + $ cp -p TranslateGer.gf TranslateDut.gf + +Then we change Ger->Dut in these files + +We take the common parts of a dictionary ; Ger doesn't have them this way but Spa does + + $ grep "L\." DictionarySpa.gf >DictionaryDut.gf + $ grep "S\." DictionarySpa.gf >>DictionaryDut.gf + +Then we add a header, copying from DictionarySpa and changing Spa->Dut. And of course a "}" to the end! + + concrete DictionarySpa of Dictionary = CatSpa + ** open ParadigmsSpa, MorphoSpa, IrregSpa, (L=LexiconSpa), (S=StructuralSpa), Prelude in { + +We can now try compile this, using -s to suppress 60k warnings about missing linearizations: + + $ gf -s DictionaryDut.gf + +This goes fine - but what about the translator itself? + + $ gf -s TranslateDut.gf + File TenseDut.gf does not exist. + +Just change it to TenseX as in many other languages, as Dutch has no special tenses. Try again (in GF shell): + + > i TranslateDut.gf + File ConstructionDut.gf does not exist. + +Let us just comment this inheritance out from TranslateDut, like in some other languages where +this module is not yet available. The same with DocumentationDut. + + ---- ConstructionDut, + ---- DocumentationDut, + +I use four dashes for comments meaning "to be fixed soon". Try again: + + > i TranslateDut.gf + File ChunkDut.gf does not exist. + +This is more critical, since we want a robust translator! Let's fix this: + + $ cd ../chunk/ + $ cp -p ChunkGer.gf ChunkDut.gf + $ cd ../translator/ + +Again, go to ChunkDut.gf and change Ger->Dut. Also look for double quotes and change strings in them. E.g. + + copula_inf_Chunk = ss "sein" --> copula_inf_Chunk = ss "zijn" + +Now try again (in GF): + + > i TranslateDut.gf + Warning: In inherited module Extensions, + ... + no occurrence of element BaseVPI + +Now we notice that ExtraDut is just a dummy module. We comment out all references to it in ExtensionsDut; of course we +will fix ExtraDut later. E.g. + + ---- BaseVPI = E.BaseVPI ; + +We could continue commenting out things that don't compile. We could just give up and comment out ExtensionsDut from TranslateDut. +It doesn't use many functions anyway... + + ---- ExtensionsDut [CompoundCN,AdAdV,UttAdV,ApposNP,MkVPI, MkVPS, PredVPS, PassVPSlash, PassAgentVPSlash], + +Unfortunately, ChunkDut also needs it. So let's at least make it compile by commenting out all offensive functions. +There is not much left, and in ChunkDut we also comment out whatever the compiler complains about, with four dashes. +We obtain + + concrete ChunkDut of Chunk = CatDut + ---- , ExtensionsDut + ** + ChunkFunctor - [UseVC, VPS_Chunk, emptyNP, VPI_Chunk] + with (Syntax = SyntaxDut), (Extensions = ExtensionsDut) + ** + open + SyntaxDut, (E = ExtensionsDut), Prelude, + ResDut, (P = ParadigmsDut) in { + +Et voilà: + + > i TranslateDut.gf + linking ... OK + + Languages: TranslateDut + +Let us try it: + + > gr | l -treebank + Translate: ChunkPhr (PlusChunk fullstop_Chunk (OneChunk refl_SgP1_Chunk)) + TranslateDut: * . mij zelf + +Let us make it compilable in GF/lib/src/Makefile by adding entries for TranslateDut and Translate11 - since we now have 11 languages. +Again, we can look for TranslateGer and make a copy beside it, as well as Translate10: + + TranslateGer: TranslateGer.pgf + TranslateDut: TranslateDut.pgf + + TranslateDut.pgf:: ; $(GFMKT) -name=TranslateDut translator/TranslateDut.gf + + # Without dependencies: + Translate11: + $(GFMKT) -name=Translate11 $(TRANSLATE11) +RTS -K32M + + # With dependencies: + Translate11.pgf: $(TRANSLATE10) + $(GFMKT) -name=Translate11 $(TRANSLATE11) +RTS -K32M + +Since we have everything up to date in Translate10, let us just add the necessary new things to include Dut: + + $ pwd + /Users/aarne/GF/lib/src + + $ make TranslateDut.pgf + + $ make Translate11 + +We can first try it in the plain C runtime: + + $ pgf-translate Translate11.pgf Phr TranslateEng TranslateDut + > what is this + 0.07 sec + [18.070923] ChunkPhr (OneChunk (QS_Chunk (UseQCl (TTAnt TPres ASimul) PPos (QuestIComp (CompIP whatSg_IP) + (DetNP (DetQuant this_Quant NumSg)))))) + * wat is dit + wat is dit + > can we translate now + 0.19 sec + [35.258053] ChunkPhr (OneChunk (QS_Chunk (UseQCl (TTAnt TPres ASimul) PPos (QuestCl (PredVP (UsePron we_Pron) + (AdvVP (ComplVV can_1_VV (UseV translate_V)) now_Adv)))))) + * kunnen we nu [translate_V] + kunnen we nu [translate_V] + +What about the web application? + +First make the new grammar accessible: + + cd GF/src/www/robust/ + $ ls + App10.pgf Translate10.pgf Translate8.pgf + $ ln -s /Users/aarne/GF/lib/src/Translate11.pgf + +Then update the reference to this grammar - change Translate10 to Translate11 in one place: + + $ cd .. + $ grep Translate10 */*.js + js/gftranslate.js:gftranslate.jsonurl="/robust/Translate10.pgf" + +Try start the gf server + + gf -server --document-root=/Users/aarne/GF/src/www/ + +Point your browser to http://localhost:41296/wc.html + +Wait a bit, and you will see Dutch among the available languages! + + + +=Building the Android app= + +Navigate to the App directory and create AppDut; also change Ger->Dut as before + + $ pwd + /Users/aarne/GF/examples/app + + $ cp -p AppGer.gf AppDut.gf + +Extend the Makefile as before: + + TRANSLATE11=$(TRANSLATE10) AppDut.pgf + # Without dependencies: + App11: + $(GFMKT) -name=App11 $(TRANSLATE11) +RTS -K200M + +Make it: + + $ make AppDut.pgf + $ make App11 + +Check that all languages are consistently included: + + $ gf +RTS -K200M App11.pgf + Languages: AppBul AppChi AppDut AppEng AppFin AppFre AppGer AppHin AppIta AppSpa AppSwe + + App> l house_N + къща + 房 子 + huis + house + talo + maison + Haus + शाला + casa + casa + hus + +Now follow the instructions in README in the app/ directory. +You also need to add to Translator.java, in a place near AppGer reference, + + new Language("nl-NL", "Dutch", "AppDut", R.xml.qwerty), + +