prodrop pronouns from Anna's grammar

This commit is contained in:
krasimir
2016-08-30 11:28:11 +00:00
parent 7abf13c0f8
commit 500ff14f7b
6 changed files with 41 additions and 20 deletions

View File

@@ -1,4 +1,4 @@
concrete CatSlv of Cat = CommonX ** open ResSlv, (P=ParamX) in { concrete CatSlv of Cat = CommonX ** open ResSlv, (P=ParamX), Prelude in {
lincat lincat
-- Sentence -- Sentence
@@ -18,7 +18,7 @@ lincat
-- Noun -- Noun
CN = {s : Species => Case => Number => Str; g : AGender} ; CN = {s : Species => Case => Number => Str; g : AGender} ;
NP = {s : Case => Str ; a : Agr} ; NP = {s : Case => Str; a : Agr; isPron : Bool} ;
Pron = {s : Case => Str; poss : Gender => Case => Number => Str; a : Agr} ; Pron = {s : Case => Str; poss : Gender => Case => Number => Str; a : Agr} ;

View File

@@ -1,10 +1,11 @@
concrete ConjunctionSlv of Conjunction = concrete ConjunctionSlv of Conjunction =
CatSlv ** open ResSlv in { CatSlv ** open ResSlv, Prelude in {
lin lin
ConjNP conj xs = { ConjNP conj xs = {
s = \\c => xs.s1 ! c ++ conj.s ++ xs.s2 ! c ; s = \\c => xs.s1 ! c ++ conj.s ++ xs.s2 ! c ;
a = {g = xs.a.g; n = conjNumber conj.n xs.a.n; p = xs.a.p} a = {g = xs.a.g; n = conjNumber conj.n xs.a.n; p = xs.a.p} ;
isPron = False
} ; } ;
ConjAP conj xs = { ConjAP conj xs = {
s = \\sp,g,c,n => xs.s1 ! sp ! g ! c ! n ++ conj.s ++ xs.s2 ! sp ! g ! c ! n s = \\sp,g,c,n => xs.s1 ! sp ! g ! c ! n ++ conj.s ++ xs.s2 ! sp ! g ! c ! n

View File

@@ -1,4 +1,4 @@
concrete NounSlv of Noun = CatSlv ** open ResSlv in { concrete NounSlv of Noun = CatSlv ** open ResSlv,Prelude in {
lin lin
DetCN det cn = { DetCN det cn = {
@@ -13,11 +13,21 @@ concrete NounSlv of Noun = CatSlv ** open ResSlv in {
UseGen => Pl UseGen => Pl
} ; } ;
p = P3 p = P3
} } ;
isPron = False
} ; } ;
UsePN pn = {s = pn.s; a = {g=agender2gender pn.g; n=Sg; p=P3}} ; UsePN pn = {
UsePron p = p ; s = pn.s;
a = {g=agender2gender pn.g; n=Sg; p=P3};
isPron = False
} ;
UsePron p = {
s = p.s;
a = p.a;
isPron = True
} ;
DetQuant quant num = { DetQuant quant num = {
s = \\g,c => quant.s ! g ! c ! (numAgr2num ! num.n) ++ num.s ! g ! c; s = \\g,c => quant.s ! g ! c ! (numAgr2num ! num.n) ++ num.s ! g ! c;
@@ -27,7 +37,8 @@ concrete NounSlv of Noun = CatSlv ** open ResSlv in {
DetNP det = { DetNP det = {
s = det.s ! Masc ; s = det.s ! Masc ;
a = {g=Masc; n=case det.n of {UseNum n=>n; UseGen=>Pl}; p=P3}; a = {g=Masc; n=case det.n of {UseNum n=>n; UseGen=>Pl}; p=P3} ;
isPron = False
} ; } ;
PossPron p = { PossPron p = {
@@ -54,7 +65,8 @@ concrete NounSlv of Noun = CatSlv ** open ResSlv in {
MassNP n = { MassNP n = {
s = \\c => n.s ! Indef ! c ! Sg ; s = \\c => n.s ! Indef ! c ! Sg ;
a = {g=agender2gender n.g; n=Sg; p=P3} a = {g=agender2gender n.g; n=Sg; p=P3} ;
isPron = False
} ; } ;
UseN n = {s = \\_ => n.s; g = n.g} ; UseN n = {s = \\_ => n.s; g = n.g} ;

View File

@@ -590,7 +590,8 @@ oper
Loc => loc; Loc => loc;
Instr=>instr Instr=>instr
} ; } ;
a = {g=Neut; n=n; p=P3} a = {g=Neut; n=n; p=P3} ;
isPron = False
} ; } ;
mkInterj : Str -> Interj = mkInterj : Str -> Interj =

View File

@@ -1,4 +1,4 @@
resource ResSlv = open ParamX in { resource ResSlv = open ParamX, Prelude in {
param param
Case = Nom | Gen | Dat | Acc | Loc | Instr; Case = Nom | Gen | Dat | Acc | Loc | Instr;
@@ -53,11 +53,15 @@ oper
Neg => table {Past => "ni"; _ => "ne"} Neg => table {Past => "ni"; _ => "ne"}
} ; } ;
predV : (VForm => Str) -> Tense => Polarity => Agr => Str = predV : Bool -> (VForm => Str) -> Tense => Polarity => Agr => Str =
\v -> table { \ispron,v -> table {
Pres => \\p,a => neg ! p ! Pres ++ v ! VPres a.n a.p ; Pres => \\p,a => neg ! p ! Pres ++ v ! VPres a.n a.p ;
Past => \\p,a => neg ! p ! Past + sem_V ! a.n ! a.p ++ v ! VPastPart a.g a.n ; Past => \\p,a => case <ispron,p> of {
Fut => \\p,a => neg ! p ! Fut ++ bom_V ! a.n ! a.p ++ v ! VPastPart a.g a.n ; <True,Pos> => v ! VPastPart a.g a.n ++ sem_V ! a.n ! a.p ;
<_ ,_ > => neg ! p ! Past + sem_V ! a.n ! a.p ++ v ! VPastPart a.g a.n } ;
Fut => \\p,a => case <ispron,p> of {
<True,Pos> => v ! VPastPart a.g a.n ++ bom_V ! a.n ! a.p ;
<_ ,_ > => neg ! p ! Fut ++ bom_V ! a.n ! a.p ++ v ! VPastPart a.g a.n } ;
Cond => \\p,a => neg ! p ! Cond ++ "bi" ++ v ! VPastPart a.g a.n Cond => \\p,a => neg ! p ! Cond ++ "bi" ++ v ! VPastPart a.g a.n
} ; } ;
@@ -103,10 +107,13 @@ oper
s : Tense => Anteriority => Polarity => Str s : Tense => Anteriority => Polarity => Str
} ; } ;
mkClause : Str -> Agr -> VP -> Clause = mkClause : Str -> Agr -> Bool -> VP -> Clause =
\subj,agr,vp -> { \subj,agr,ispron,vp -> {
s = \\t,a,p => s = \\t,a,p =>
subj ++ predV vp.s ! t ! p ! agr ++ vp.s2 ! agr case ispron of {
False => subj ++ predV ispron vp.s ! t ! p ! agr ++ vp.s2 ! agr ;
True => predV ispron vp.s ! t ! p ! agr ++ vp.s2 ! agr
}
} ; } ;
insertObj : (Agr => Str) -> VP -> VP = \obj,vp -> vp ** { insertObj : (Agr => Str) -> VP -> VP = \obj,vp -> vp ** {

View File

@@ -1,7 +1,7 @@
concrete SentenceSlv of Sentence = CatSlv ** open Prelude, ResSlv in { concrete SentenceSlv of Sentence = CatSlv ** open Prelude, ResSlv in {
lin lin
PredVP np vp = mkClause (np.s ! Nom) np.a vp ; PredVP np vp = mkClause (np.s ! Nom) np.a np.isPron vp ;
ImpVP vp = { ImpVP vp = {
s = \\pol,g,n => vp.s ! VImper2 n ++ vp.s2 ! {g=g; n=n; p=P2} ; s = \\pol,g,n => vp.s ! VImper2 n ++ vp.s2 ! {g=g; n=n; p=P2} ;