diff --git a/examples/phrasebook/SentencesPol.gf b/examples/phrasebook/SentencesPol.gf index 2c733f274..ef728298a 100644 --- a/examples/phrasebook/SentencesPol.gf +++ b/examples/phrasebook/SentencesPol.gf @@ -1,12 +1,14 @@ concrete SentencesPol of Sentences = NumeralPol ** SentencesI - [ - Day,PDay,OnDay,Language,PLanguage, + Day,PDay,OnDay,Language,PLanguage,Citizenship, + PCitizenship,CitiNat,PropCit,ACitizen, Nationality,Transport,PTransport,ByTransp, IFemale,YouFamFemale,YouPolFemale,YouPolMale] with (Syntax = SyntaxPol), (Symbolic = SymbolicPol), - (Lexicon = LexiconPol) ** open (R = ResPol), (Pron = PronounMorphoPol), Prelude in { + (Lexicon = LexiconPol) ** + open (N = NounPol),(R = ResPol), (Pron = PronounMorphoPol), Prelude in { flags optimize =values ; coding =utf8 ; @@ -14,19 +16,25 @@ concrete SentencesPol of Sentences = lincat Day = { name,hab,adv:Str } ; Language = A ; - Citizenship = A ; - Nationality = { lang: A; prop: A; country: NP } ; - Transport = CN ; + Citizenship = { prop:A; citizenMSg:Str; citizenMPl:Str; citizenF:Str} ; + Nationality = { lang: A; prop: A; country: NP; citizenMSg:Str; citizenMPl:Str; citizenF:Str } ; + Transport = { cn:CN; verb:Str} ; lin PDay d = (ss d.name) ** {lock_Text = <>}; OnDay d = (ss d.adv) ** {lock_Adv = <>}; PLanguage l = (ss l.pos.s1) ** {lock_Text = <>}; - PTransport t = mkPhrase (mkUtt t) ; - ByTransp t = (ss (t.s!R.Sg!R.Instr)) ** {lock_Adv = <>}; + PTransport t = mkPhrase (mkUtt t.cn) ; + ByTransp t = { s=t.cn.s!R.Sg!R.Instr; lock_Adv = <>} ; + PCitizenship c = mkPhrase (mkUtt (mkAP c.prop)) ; + CitiNat n = {prop=n.prop; citizenMSg=n.citizenMSg; citizenMPl=n.citizenMPl; citizenF=n.citizenF}; + PropCit c = c.prop; + ACitizen p n = mkCl p.name {s= case p.name.gn of { + R.MascPersSg=>n.citizenMSg; R.FemSg=>n.citizenF; _=>n.citizenMPl + }; + lock_Adv=<>}; IFemale = mkPerson (Pron.pronJaFoo (R.PGen R.Fem)); YouFamFemale = mkPerson (Pron.pronTyFoo (R.PGen R.Fem)); YouPolFemale = mkPerson (Pron.pronPani); YouPolMale = mkPerson (Pron.pronPan); - } diff --git a/examples/phrasebook/WordsPol.gf b/examples/phrasebook/WordsPol.gf index 3f274944f..34da268a3 100644 --- a/examples/phrasebook/WordsPol.gf +++ b/examples/phrasebook/WordsPol.gf @@ -88,7 +88,7 @@ concrete WordsPol of Words = SentencesPol ** Disco = mkPlaceNa "dyskoteka" "dyskotekę" "dyskotece" Fem ; Hospital = mkPlaceDo "szpital" "szpitala" "szpitalu" (Masc Inanimate); Hotel = mkPlaceDo "hotel" "hotelu" "hotelu" (Masc Inanimate) ; - Museum = mkPlaceDo "museum" "museum" "museum" Neut ; + Museum = mkPlaceDo "muzeum" "muzeum" "muzeum" Neut ; Park = mkPlaceDo "park" "parku" "parku" (Masc Inanimate) ; Parking = mkPlaceNa "parking" "parking" "parkingu" (Masc Inanimate) ; Pharmacy = mkPlaceDo "apteka" "apteki" "aptece" Fem ; @@ -104,7 +104,7 @@ concrete WordsPol of Words = SentencesPol ** University = mkPlaceNa L.university_N; Zoo = mkPlaceDo "zoo" "zoo" "zoo" Neut ; - CitRestaurant cit = { name=(mkCN cit (mkCN L.restaurant_N)); + CitRestaurant cit = { name=(mkCN cit.prop (mkCN L.restaurant_N)); at = { s="w"; c=LocPrep; lock_Prep = <> }; to = {s="do"; c=GenPrep; lock_Prep = <>}; isPl = False }; @@ -122,50 +122,48 @@ concrete WordsPol of Words = SentencesPol ** Zloty = mkCN (mkCurrency "złoty" "złote" "złotych" (Masc Animate)); -- Nationalities --- język, po języku, obywatelstwo, kraj - Belgian = mkA (mkCompAdj "belgijski") ; +-- język, po języku, obywatelstwo, kraj, obywatelem, obywatelami, obywatelką + Belgian = {prop=mkA (mkCompAdj "belgijski"); citizenMSg="Belgiem"; citizenMPl="Belgami"; citizenF="Belgijką"}; Belgium = mkNP (P.nLilia "Belgia") ; - Bulgarian = mkNat "bułgarski" ["po bułgarsku"] "bułgarski" (P.nLilia "Bułgaria"); - Catalan = mkNat "kataloński" ["po katalońsku"] "kataloński" (P.nLilia "Katalonia"); - Danish = mkNat "duński" ["po duńsku"] "duński" (P.nLilia "Dania"); - Dutch = mkNat "holenderski" ["po holendersku"] "holenderski" (P.nLilia "Holandia"); - English = mkNat "angielski" ["po angielsku"] "angielski" (P.nLilia "Anglia"); - Finnish = mkNat "fiński" ["po fińsku"] "finladzki" (P.nLilia "Finlandia"); + Bulgarian = mkNat "bułgarski" ["po bułgarsku"] "bułgarski" (P.nLilia "Bułgaria") "Bułgarem" "Bułgarami" "Bułgarką"; + Catalan = mkNat "kataloński" ["po katalońsku"] "kataloński" (P.nLilia "Katalonia") "Katalończykiem" "Katalończykami" "Katalonką"; + Danish = mkNat "duński" ["po duńsku"] "duński" (P.nLilia "Dania") "Duńczykiem" "Duńczykami" "Dunką"; + Dutch = mkNat "holenderski" ["po holendersku"] "holenderski" (P.nLilia "Holandia") "Holendrem" "Holendrami" "Holenderką"; + English = mkNat "angielski" ["po angielsku"] "angielski" (P.nLilia "Anglia") "Anglikiem" "Anglikami" "Angielką"; + Finnish = mkNat "fiński" ["po fińsku"] "finladzki" (P.nLilia "Finlandia") "Finem" "Finami" "Finką"; Flemish = mkA (mkCompAdj "flamandzki" ["po flamandzku"]); - French = mkNat "francuski" ["po francusku"] "francuski" (P.nLilia "Francja"); - German = mkNat "niemiecki" ["po niemiecku"] "niemiecki" (mkCountry "Niemcy" "Niemczech" Plur); - Italian = mkNat "włoski" ["po włosku"] "włoski" (mkCountry "Włochy" "Włoszech" Plur); - Norwegian = mkNat "norweski" ["po norwesku"] "norweski" (P.nLilia "Norwegia"); - Polish = mkNat "polski" ["po polsku"] "polski" (mkCountry "Polska" "Polsce" Fem); - Romanian = mkNat "rumuński" ["po rumuńsku"] "rumuński" (P.nLilia "Rumunia"); - Russian = mkNat "rosyjski" ["po rosyjsku"] "rosyjski" (P.nLilia "Rosja"); - Spanish = mkNat "hiszpański" ["po hiszpańsku"] "hiszpański" (P.nLilia "Hiszpania"); - Swedish = mkNat "szwedzki" ["po szwedzku"] "szwedzki" (P.nLilia "Szwecja"); + French = mkNat "francuski" ["po francusku"] "francuski" (P.nLilia "Francja") "Framcuzem" "Francuzami" "Francuzką"; + German = mkNat "niemiecki" ["po niemiecku"] "niemiecki" (mkCountry "Niemcy" "Niemczech" Plur) "Niemcem" "Niemcami" "Niemką"; + Italian = mkNat "włoski" ["po włosku"] "włoski" (mkCountry "Włochy" "Włoszech" Plur)"Włochem" "Włochami" "Włoszką"; + Norwegian = mkNat "norweski" ["po norwesku"] "norweski" (P.nLilia "Norwegia") "Norwegiem" "Norwegami" "Norweszką"; + Polish = mkNat "polski" ["po polsku"] "polski" (mkCountry "Polska" "Polsce" Fem) "Polakiem" "Polakami" "Polką"; + Romanian = mkNat "rumuński" ["po rumuńsku"] "rumuński" (P.nLilia "Rumunia") "Rumunem" "Rumunami" "Rumunką"; + Russian = mkNat "rosyjski" ["po rosyjsku"] "rosyjski" (P.nLilia "Rosja") "Rosjaninem" "Rosjanami" "Rosjanką"; + Spanish = mkNat "hiszpański" ["po hiszpańsku"] "hiszpański" (P.nLilia "Hiszpania") "Hiszpanem" "Hiszpanami" "Hiszpanką"; + Swedish = mkNat "szwedzki" ["po szwedzku"] "szwedzki" (P.nLilia "Szwecja") "Szwedem" "Szwedami" "Szwedką"; -- Means of transportation - Bike = mkCN L.bike_N ; - Bus = mkTransport "autobus" "autobusem" (Masc Inanimate) ; - Car = mkCN L.car_N ; - Ferry = mkTransport "prom" "promem" (Masc Inanimate) ; - Plane = mkCN L.airplane_N ; - Subway = mkTransport "metro" "metrem" Neut ; - Taxi = mkTransport "taksówka" "taksówką" Fem ; - Train = mkTransport "pociąg" "pociągiem" (Masc Inanimate) ; - Tram = mkTransport "tramwaj" "tramwajem" (Masc Inanimate) ; + Bike = {cn = mkCN L.bike_N ; verb="jedzie" }; + Bus = mkTransport "autobus" "autobusem" (Masc Inanimate) "jedzie"; + Car = {cn = mkCN L.car_N ; verb="jedzie" }; + Ferry = mkTransport "prom" "promem" (Masc Inanimate) "płynie"; + Plane = {cn = mkCN L.airplane_N ; verb="leci" }; + Subway = mkTransport "metro" "metrem" Neut "jedzie"; + Taxi = mkTransport "taksówka" "taksówką" Fem "jedzie"; + Train = mkTransport "pociąg" "pociągiem" (Masc Inanimate) "jedzie"; + Tram = mkTransport "tramwaj" "tramwajem" (Masc Inanimate) "jedzie"; ByFoot = ss "pieszo" ** {lock_Adv = <>}; -- Actions: the predication patterns are very often language-dependent. - --- ok commented because of the effectivness - AHasAge p num = mkCl p.name have_V2 (mkNP (mkDet num) (mkCN L.year_N)) ; - AHasChildren p num = mkCl p.name have_V2 (mkNP num L.child_N) ; --!!!!!!!!!!! FIXME HELP!!!!! - AHasRoom p num = mkCl p.name have_V2 - (mkNP (mkNP a_Det (P.nPokoj "pokój")) (SyntaxPol.mkAdv for_Prep (mkNP num (L.person_N)))) ; - AHasTable p num = mkCl p.name have_V2 - (mkNP (mkNP a_Det (L.table_N)) (SyntaxPol.mkAdv for_Prep (mkNP num (L.person_N)))) ; +-- AHasAge p num = mkCl p.name have_V2 (mkNP (mkDet num) (mkCN L.year_N)) ; +-- AHasChildren p num = mkCl p.name have_V2 (mkNP num L.child_N) ; --!!!!!!!!!!! FIXME HELP!!!!! +-- AHasRoom p num = mkCl p.name have_V2 +-- (mkNP (mkNP a_Det (P.nPokoj "pokój")) (SyntaxPol.mkAdv for_Prep (mkNP num (L.person_N)))) ; +-- AHasTable p num = mkCl p.name have_V2 +-- (mkNP (mkNP a_Det (L.table_N)) (SyntaxPol.mkAdv for_Prep (mkNP num (L.person_N)))) ; @@ -253,20 +251,20 @@ concrete WordsPol of Words = SentencesPol ** HowFar place = mkQS (Q.QuestIComp (Q.CompIAdv far_IAdv) place.name) ; --jak daleko jest z cenrum do hotelu - HowFarFrom x y = { s=["jak jest daleko z"] ++ x.name.dep!GenPrep ++ y.to.s; lock_QS=<> }; + HowFarFrom x y = { s=["jak daleko jest z"] ++ x.name.dep!GenPrep ++ y.to.s; lock_QS=<> }; --jak daleko jest pieszo z centrum do hotelu HowFarFromBy x y t = - { s=["jak jest daleko"] ++ t.s ++ "z" ++ x.name.dep!GenPrep ++ y.to.s; lock_QS=<> }; + { s=["jak daleko jest"] ++ t.s ++ "z" ++ x.name.dep!GenPrep ++ y.to.s; lock_QS=<> }; HowFarBy y t = - { s=["jak jest daleko"] ++ t.s ++ y.to.s; lock_QS=<> }; + { s=["jak daleko jest"] ++ t.s ++ y.to.s; lock_QS=<> }; WhichTranspPlace trans place = - { s= ktory ! AF (cast_gennum!) Instr ++ trans.s!Sg!Instr ++ place.to.s; lock_QS=<> }; + { s= ktory ! AF (cast_gennum!) Nom ++ trans.cn.s!Sg!Nom ++ trans.verb ++ place.to.s; lock_QS=<> }; IsTranspPlace trans place = - { s= ["czy jest stąd"] ++ trans.s!Sg!Nom ++ place.to.s; lock_QS=<> }; + { s= ["czy jest stąd"] ++ trans.cn.s!Sg!Nom ++ place.to.s; lock_QS=<> }; -- auxiliaries @@ -299,12 +297,28 @@ concrete WordsPol of Words = SentencesPol ** at = { s="na"; c=LocPrep; lock_Prep = <> }; to = {s="na"; c=AccPrep; lock_Prep = <>}; isPl = False }; }; - mkTransport : Str -> Str -> Gender -> CN = \nom,instr,g -> { + mkTransport : Str -> Str -> Gender -> Str -> {cn:CN; verb:Str} = \nom,instr,g,verb -> { + cn = { s = \\n,c => case of { => nom; => instr; _ => ["not implemented"]}; g = g; lock_CN=<> + }; + verb=verb }; + mkCitizen = overload { + mkCitizen : Str -> N = \s -> { + s = table {SF Sg Instr => s; _ => ["not implemented"]}; + g = Fem; + lock_N=<> + }; + mkCitizen : Str -> Str -> N = \inst, instpl -> { + s = table {SF Sg Instr => inst; SF Pl Instr => instpl; _ => ["not implemented"]}; + g = Masc Personal; + lock_N=<> + }; + }; + mkCountry : Str -> Str -> Gender -> N = \nom,loc,g -> { s = table {SF Sg Nom => nom; SF Sg Loc => loc; _ => ["not implemented"]}; g = g; @@ -319,24 +333,27 @@ concrete WordsPol of Words = SentencesPol ** mkCurrency : Str -> Str -> Str -> Gender -> N = \nom,nompl,genpl,g -> { - s = table {SF Sg Nom => nom; SF Pl Nom => nompl; SF Pl Gen => genpl; _ => ["not implemented"]}; + s = table {SF Sg Nom => nom; SF Pl (Nom|Acc) => nompl; SF Pl Gen => genpl; _ => ["not implemented"]}; g = g; lock_N=<> }; - mkNat : Str -> Str -> Str -> N -> { lang: A; prop: A; country: NP } = \lang,ladv,prop,country -> { - lang = mkA (mkCompAdj lang ladv); prop = mkA (mkCompAdj prop); country=mkNP country }; + mkNat : Str -> Str -> Str -> N -> Str -> Str -> Str -> + { lang: A; prop: A; country: NP; citizenMSg:Str; citizenMPl: Str; citizenF:Str } = + \lang,ladv,prop,country,citiMsg, citiMpl, citiF -> { + lang = mkA (mkCompAdj lang ladv); prop = mkA (mkCompAdj prop); + country=mkNP country; citizenMSg=citiMsg; citizenMPl=citiMpl; citizenF=citiF }; - open_A : A = (mkA (mkCompAdj "otwarty")); - closed_A : A = (mkA (mkCompAdj "zamknięty")); + open_A : A = (mkA (mkCompAdj "otwarty")); + closed_A : A = (mkA (mkCompAdj "zamknięty")); - xOf : NPPerson -> Num -> N -> NPPerson = \p,num,n -> - { name = case p.isPron of { - True => mkNP (mkDet p.poss num) n; - False => mkNP (mkNP n) ({s=p.name.dep!GenNoPrep; lock_Adv=<>}) - }; - isPron = False; - poss = p.poss }; --it is not used, because it is not a pron + xOf : NPPerson -> Num -> N -> NPPerson = \p,num,n -> + { name = case p.isPron of { + True => mkNP (mkDet p.poss num) n; + False => mkNP (mkNP (mkDet a_Quant num) n) ({s=p.name.dep!GenNoPrep; lock_Adv=<>}) + }; + isPron = False; + poss = p.poss }; --it is not used, because it is not a pron mkSuperl : A -> Det = \a -> SyntaxPol.mkDet the_Art (SyntaxPol.mkOrd a) ; diff --git a/lib/src/polish/AdjectiveMorphoPol.gf b/lib/src/polish/AdjectiveMorphoPol.gf index c2716a5fd..3ded50907 100644 --- a/lib/src/polish/AdjectiveMorphoPol.gf +++ b/lib/src/polish/AdjectiveMorphoPol.gf @@ -140,6 +140,8 @@ resource AdjectiveMorphoPol = ResPol ** open Prelude, (Predef=Predef) in { x + "zły" => model4 form (x+"źli"); x + "ły" => model4 form (x+"li"); x + "sny" => model4 form (x+"śni"); + x + "szny" => model4 form (x+"szni"); + x + "rzny" => model4 form (x+"rzni"); x + "zny" => model4 form (x+"źni"); x + "chy" => model4 form (x+"si"); x + "hy" => model4 form (x+"zi"); -- błahy - błazi (not really in use) diff --git a/lib/src/polish/NumeralPol.gf b/lib/src/polish/NumeralPol.gf index 331c1e090..2ce39ad96 100644 --- a/lib/src/polish/NumeralPol.gf +++ b/lib/src/polish/NumeralPol.gf @@ -485,7 +485,7 @@ n9 = { unit = table { s = s.s; o = s.o; a = s.a; - n = Pl + n = s.n -- was Pl - why? very strange ASL }; -- pot3 : Sub1000 -> Sub1000000 ; -- m * 1000