From 3a39903563d0dd50d9091bc2336767e23ed7874a Mon Sep 17 00:00:00 2001 From: aarne Date: Thu, 13 Mar 2014 13:27:51 +0000 Subject: [PATCH] AppIta, with a small lexicon --- lib/src/experimental/AppIta.gf | 18 ++ lib/src/experimental/RGLBaseIta.gf | 20 ++ lib/src/experimental/SmallPredIta.gf | 249 ++++++++++++++++++ .../ui/android/Translator.java | 1 + 4 files changed, 288 insertions(+) create mode 100644 lib/src/experimental/AppIta.gf create mode 100644 lib/src/experimental/RGLBaseIta.gf create mode 100644 lib/src/experimental/SmallPredIta.gf diff --git a/lib/src/experimental/AppIta.gf b/lib/src/experimental/AppIta.gf new file mode 100644 index 000000000..2a7d3715b --- /dev/null +++ b/lib/src/experimental/AppIta.gf @@ -0,0 +1,18 @@ +--# -path=.:../translator:../../../examples/phrasebook + +concrete AppIta of App = + SmallPredIta + , ExtensionsIta [CN,NP,AdA,AdV,CompoundCN,AdAdV,UttAdV,ApposNP] + , DocumentationIta + , DictionaryIta + , PhrasebookIta - [open_A] + + ** { + +flags + literal = Symb ; + +lin + PhrasePhr p = {s = "+" ++ p.s} | p ; + +} \ No newline at end of file diff --git a/lib/src/experimental/RGLBaseIta.gf b/lib/src/experimental/RGLBaseIta.gf new file mode 100644 index 000000000..04b49107e --- /dev/null +++ b/lib/src/experimental/RGLBaseIta.gf @@ -0,0 +1,20 @@ +concrete RGLBaseIta of RGLBase = + +-- modules in Grammar, excluding Structural, Verb, Sentence, Question + TenseIta - [TTAnt], + NounIta - [PPartNP], -- to be generalized + AdjectiveIta, + NumeralIta, + ConjunctionIta, + AdverbIta, + PhraseIta, +---- Sentence, + QuestionIta - [QuestCl,QuestVP,QuestSlash,QuestIAdv,QuestIComp], + RelativeIta - [RelCl,RelVP,RelSlash], +---- Idiom [NP, VP, Cl, Tense, ProgrVP, ExistNP, SelfAdvVP, SelfAdVVP, SelfNP], ---- why only these? + + SymbolIta [PN, Symb, String, CN, Card, NP, MkSymb, SymbPN, CNNumNP] ; ---- why only these? + +---- Construction, +---- Extensions, +---- Documentation ; diff --git a/lib/src/experimental/SmallPredIta.gf b/lib/src/experimental/SmallPredIta.gf new file mode 100644 index 000000000..664525c3b --- /dev/null +++ b/lib/src/experimental/SmallPredIta.gf @@ -0,0 +1,249 @@ +concrete SmallPredIta of SmallPred = + RGLBaseIta ** + + open ResIta, CommonRomance, (S = SyntaxIta), (P = ParadigmsIta), PhonoIta, Prelude in { + +-- NDPredIta [ +lincat + PrV_none, PrV_np , PrV_v , PrV_s , PrV_q , PrV_a , PrV_n , + PrV_np_np , PrV_np_v , PrV_np_s , PrV_np_q , PrV_np_a , PrV_np_n + = {s : VF => Str ; c2 : Compl ; vtyp : VType} ; + PrAdv_none = S.Adv ; + PrS = {s : Str} ; + PrAP_none = S.AP ; + PrCN_none = S.CN ; + + +lincat + PrVP_none , PrVP_np , PrVP_v , PrVP_s , PrVP_q , PrVP_a , PrVP_n , + PrVP_np_np , PrVP_np_v , PrVP_np_s , PrVP_np_q , PrVP_np_a , PrVP_np_n + = { + v : Agr => Str ; + inf : Str ; + c2 : Compl ; + ne : Str ; -- empty in Pos, "ne" in Neg + } ; + + PrCl_none + = {s : Str} ; + PrQCl_none + = {s : Str} ; + +lin + UttPrS s = s ; + + UseV_none, + UseV_np, + UseV_v, + UseV_s, + UseV_a, + UseV_q, + UseV_n, + UseV_np_np, + UseV_np_v, + UseV_np_s, + UseV_np_a, + UseV_np_q, + UseV_np_n + = \a,t,p,v -> mkVP (t.s ++ a.s ++ p.s) t.t a.a p.p v [] ; + +oper + mkVP : Str -> RTense -> Anteriority -> RPolarity -> PrV_none -> Str -> PrVP_none = \atp,tense,ant,pol,verb,obj -> + let + oldvp : ResIta.VP = + predV verb ; + clause : Agr -> {s : Direct => RTense => Anteriority => RPolarity => Mood => Str} = \agr -> + mkClause atp False False agr oldvp ; + nepas : Str * Str = case pol of {RPos => <[],[]> ; _ => <"non", []>} ; + in + lin PrVP_none { + v : Agr => Str = \\agr => (clause agr).s ! DDir ! tense ! ant ! RPos ! Indic ++ nepas.p2 ++ obj ; + inf : Str = verb.s ! VInfin False ++ obj ; ---- ant,pol + c2 : Compl = verb.c2 ; + ne : Str = nepas.p1 ; + } ; + +lin + UseAdv_none a t p adv = mkVP (t.s ++ a.s ++ p.s) t.t a.a p.p (copula ** {c2 = P.accusative}) adv.s ; + + UseCN_none a t p cn = mkVP (t.s ++ a.s ++ p.s) t.t a.a p.p (copula ** {c2 = P.accusative}) (cn.s ! Sg) ; + + UseNP_none a t p np = mkVP (t.s ++ a.s ++ p.s) t.t a.a p.p (copula ** {c2 = P.accusative}) ((np.s ! Nom).comp) ; + + +lin + QuestCl_none cl = {s = cl.s} ; + + UseCl_none cl = cl ; + UseQCl_none cl = cl ; + + PredVP_none, PredVP_np, PredVP_v, PredVP_a, PredVP_q, PredVP_s, + PredVP_np_np, PredVP_np_v, PredVP_np_a, PredVP_np_q, PredVP_np_s + = \np, vp -> { + s = (np.s ! Nom).comp ++ vp.ne ++ vp.v ! np.a ; + } ; + + Pred2VP_none, Pred2VP_np, Pred2VP_v, Pred2VP_a, Pred2VP_q, Pred2VP_s, + Pred2VP_np_np, Pred2VP_np_v, Pred2VP_np_a, Pred2VP_np_q, Pred2VP_np_s + = \s,v,o -> + let obj = o.s ! v.c2.c in + { + s = (s.s ! Nom).comp ++ v.ne ++ obj.c1 ++ obj.c2 ++ v.v ! s.a ++ v.c2.s ++ obj.comp ; + } ; + + + PredAP_none + = \a, t, p, np, ap -> + let verb = mkVP (t.s ++ a.s ++ p.s) t.t a.a p.p (lin PrV_none (copula ** {c2 = P.accusative})) [] in + { + s = (np.s ! Nom).comp ++ verb.ne ++ verb.v ! np.a ++ ap.s ! AF np.a.g np.a.n ; + } ; + + + +-- NDLiftIta [ + + LiftV, + LiftVS, + LiftVQ, + LiftVV, + LiftVA, + LiftVN + = \v -> v ** {c2 = P.accusative} ; + + LiftV2, + LiftV3, + LiftV2S, + LiftV2Q, + LiftV2V, + LiftV2A, + LiftV2N + = \v -> v ; + + LiftAP ap = ap ; + LiftCN cn = cn ; + + LiftAdv adv = adv ; + LiftAdV adv = adv ; + +-- ChunkIta [ + +lincat + Chunks = {s : Str} ; + Chunk = {s : Str}; + +lin + OneChunk c = c ; + PlusChunk c cs = cc2 c cs ; + + ChunkPhr c = ss ("*" ++ c.s) | c ; + +oper + defaultAAgr = {n = Sg ; g = Masc} ; + +lin + + + AP_Chunk ap = ss (ap.s ! AF Masc Sg) ; + AdA_Chunk ada = ada ; + Adv_Chunk adv = adv ; + AdV_Chunk adv = adv ; + AdN_Chunk adn = adn ; + Cl_Chunk cl = cl ; + QCl_Chunk cl = cl ; + CN_Pl_Chunk cn = ss (cn.s ! Pl) ; + CN_Sg_Chunk cn = ss (cn.s ! Sg) ; + CN_Pl_Gen_Chunk cn = ss ("di" ++ cn.s ! Pl) ; + CN_Sg_Gen_Chunk cn = ss ("di" ++ cn.s ! Sg) ; + Conj_Chunk conj = ss conj.s2 ; + IAdv_Chunk iadv = iadv ; + IP_Chunk ip = ss (ip.s ! Nom) ; + NP_Nom_Chunk np = ss ((np.s ! Nom).ton) ; + NP_Acc_Chunk np = ss (np.s ! Acc).ton ; + NP_Gen_Chunk np = ss (np.s ! genitive).ton ; + Numeral_Nom_Chunk num = ss (num.s ! NCard Masc) ; + Numeral_Gen_Chunk num = ss ("di" ++ num.s ! NCard Masc) ; +---- Ord_Nom_Chunk ord = ss (ord.s ! defaultAAgr) ; +---- Ord_Gen_Chunk ord = ss ("di" ++ ord.s ! defaultAAgr) ; +---- Predet_Chunk predet = ss (predet.s ! defaultAAgr ! Nom) ; + Prep_Chunk prep = prep ; ---- +---- RP_Nom_Chunk rp = ss (rp.s ! False ! defaultAAgr ! Nom) ; +---- RP_Acc_Chunk rp = ss (rp.s ! False ! defaultAAgr ! Acc) ; +---- RP_Gen_Chunk rp = ss (rp.s ! False ! defaultAAgr ! genitive) ; + Subj_Chunk subj = subj ; + + VP_none_Chunk, + VP_np_Chunk, + VP_s_Chunk, + VP_v_Chunk, + VP_a_Chunk, + VP_q_Chunk, + VP_np_np_Chunk, + VP_np_s_Chunk, + VP_np_a_Chunk, + VP_np_q_Chunk, + VP_np_v_Chunk + = \vp -> ss (vp.ne ++ vp.v ! {g = Masc ; n = Sg ; p = P3}) ; + + VP_none_inf_Chunk, + VP_np_inf_Chunk, + VP_s_inf_Chunk, + VP_a_inf_Chunk, + VP_q_inf_Chunk, + VP_v_inf_Chunk, + VP_np_np_inf_Chunk, + VP_np_s_inf_Chunk, + VP_np_a_inf_Chunk, + VP_np_q_inf_Chunk, + VP_np_v_inf_Chunk + = \vp -> ss vp.inf ; + + V_none_prespart_Chunk, + V_np_prespart_Chunk, + V_s_prespart_Chunk, + V_a_prespart_Chunk, + V_q_prespart_Chunk, + V_v_prespart_Chunk, + V_np_np_prespart_Chunk, + V_np_s_prespart_Chunk, + V_np_a_prespart_Chunk, + V_np_q_prespart_Chunk, + V_np_v_prespart_Chunk + = \v -> ss (v.s ! VGer) ; + + V_none_pastpart_Chunk, + V_np_pastpart_Chunk, + V_s_pastpart_Chunk, + V_a_pastpart_Chunk, + V_q_pastpart_Chunk, + V_v_pastpart_Chunk, + V_np_np_pastpart_Chunk, + V_np_s_pastpart_Chunk, + V_np_a_pastpart_Chunk, + V_np_q_pastpart_Chunk, + V_np_v_pastpart_Chunk + = \v -> ss (v.s ! VPart Masc Sg) ; + + copula_inf_Chunk = ss "ètre" ; + + refl_SgP1_Chunk = ss "me stesso" ; + refl_SgP2_Chunk = ss "te stesso" ; + refl_SgP3_Chunk = ss "lui stesso" ; + refl_PlP1_Chunk = ss "noi stessi" ; + refl_PlP2_Chunk = ss "voi stessi" ; + refl_PlP3_Chunk = ss "loro stessi" ; + neg_Chunk = ss "non" ; + copula_Chunk = ss "è" ; + copula_neg_Chunk = ss "non è" ; + past_copula_Chunk = ss "era" ; + past_copula_neg_Chunk = ss "non era" ; + future_Chunk = ss "vuole" ; ---- + future_neg_Chunk = ss "non vuole" ; ---- + cond_Chunk = ss "vorrebbe" ; ---- + cond_neg_Chunk = ss "non vorrebbe" ; ---- + perfect_Chunk = ss "ha" ; + perfect_neg_Chunk = ss "non ha" ; + past_perfect_Chunk = ss "aveva" ; + past_perfect_neg_Chunk = ss "non aveva" ; + +} \ No newline at end of file diff --git a/src/ui/android/src/org/grammaticalframework/ui/android/Translator.java b/src/ui/android/src/org/grammaticalframework/ui/android/Translator.java index 1340ea118..70c485b38 100644 --- a/src/ui/android/src/org/grammaticalframework/ui/android/Translator.java +++ b/src/ui/android/src/org/grammaticalframework/ui/android/Translator.java @@ -64,6 +64,7 @@ public class Translator { new Language("sv-SE", "Swedish", "AppSwe", R.xml.qwerty), new Language("fi-FI", "Finnish", "AppFin", R.xml.qwerty), new Language("fr-FR", "French", "AppFre", R.xml.qwerty), + new Language("it-IT", "Italian", "AppIta", R.xml.qwerty), }; // */