forked from GitHub/gf-rgl
(Hun) Stems in N+CN, full infl table in NP.
This commit is contained in:
@@ -12,7 +12,7 @@ concrete AdjectiveHun of Adjective = CatHun ** open ResHun, Prelude in {
|
|||||||
-- : A -> NP -> AP ;
|
-- : A -> NP -> AP ;
|
||||||
ComparA a np = emptyAP ** {
|
ComparA a np = emptyAP ** {
|
||||||
s = a.s ! Compar ;
|
s = a.s ! Compar ;
|
||||||
compar = applyAdp (caseAdp "nál" "nél") np ; -- Adessive
|
compar = np.s ! Ade ;
|
||||||
-- compar = applyAdp (prepos Nom "mint") np ;
|
-- compar = applyAdp (prepos Nom "mint") np ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|||||||
@@ -11,8 +11,8 @@ concrete NounHun of Noun = CatHun ** open ResHun, Prelude, Coordination in {
|
|||||||
s = \\c => case det.caseagr of {
|
s = \\c => case det.caseagr of {
|
||||||
True => det.s ! c ;
|
True => det.s ! c ;
|
||||||
False => det.s ! Nom
|
False => det.s ! Nom
|
||||||
} ++ cn.s ! det.n ! case2stem c
|
} ++ caseFromStem True c cn det.n
|
||||||
++ cn.rs ! det.n ! c ;
|
++ cn.compl ! det.n ! c ;
|
||||||
agr = <P3,det.n> ;
|
agr = <P3,det.n> ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
@@ -57,7 +57,8 @@ concrete NounHun of Noun = CatHun ** open ResHun, Prelude, Coordination in {
|
|||||||
|
|
||||||
-- : CN -> NP ;
|
-- : CN -> NP ;
|
||||||
MassNP cn = emptyNP ** {
|
MassNP cn = emptyNP ** {
|
||||||
s = \\c => cn.s ! Sg ! c ;
|
s = \\c => caseFromStem True c cn Sg ++
|
||||||
|
cn.compl ! Sg ! c ;
|
||||||
agr = <P3,Sg> ;
|
agr = <P3,Sg> ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
@@ -161,7 +162,7 @@ concrete NounHun of Noun = CatHun ** open ResHun, Prelude, Coordination in {
|
|||||||
-- : N -> CN
|
-- : N -> CN
|
||||||
-- : N2 -> CN ;
|
-- : N2 -> CN ;
|
||||||
UseN,UseN2 = \n -> n ** {
|
UseN,UseN2 = \n -> n ** {
|
||||||
rs = \\_,_ => [] ;
|
compl = \\_,_ => [] ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- : N2 -> NP -> CN ;
|
-- : N2 -> NP -> CN ;
|
||||||
@@ -179,17 +180,18 @@ concrete NounHun of Noun = CatHun ** open ResHun, Prelude, Coordination in {
|
|||||||
|
|
||||||
-- : AP -> CN -> CN
|
-- : AP -> CN -> CN
|
||||||
AdjCN ap cn = cn ** {
|
AdjCN ap cn = cn ** {
|
||||||
s = \\n,c => ap.s ! Sg ++ cn.s ! n ! c ++ ap.compar
|
s = \\n,c => ap.s ! Sg ++ cn.s ! n ! c ;
|
||||||
|
compl = \\n,c => ap.compar ++ cn.compl ! n ! c ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- : CN -> RS -> CN ;
|
-- : CN -> RS -> CN ;
|
||||||
RelCN cn rs = cn ** {
|
RelCN cn rs = cn ** {
|
||||||
rs = \\n,c => rs.s ! n ! c
|
compl = \\n,c => cn.compl ! n ! c ++ rs.s ! n ! c
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- : CN -> Adv -> CN ;
|
-- : CN -> Adv -> CN ;
|
||||||
AdvCN cn adv = cn ** {
|
AdvCN cn adv = cn ** {
|
||||||
s = \\n,c => cn.s ! n ! c ++ adv.s
|
compl = \\n,c => cn.compl ! n ! c ++ adv.s
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- Nouns can also be modified by embedded sentences and questions.
|
-- Nouns can also be modified by embedded sentences and questions.
|
||||||
@@ -205,7 +207,7 @@ concrete NounHun of Noun = CatHun ** open ResHun, Prelude, Coordination in {
|
|||||||
|
|
||||||
-- : CN -> NP -> CN ; -- city Paris (, numbers x and y)
|
-- : CN -> NP -> CN ; -- city Paris (, numbers x and y)
|
||||||
ApposCN cn np = cn ** {
|
ApposCN cn np = cn ** {
|
||||||
s = \\n,c => cn.s ! n ! c ++ np.s ! Nom
|
compl = \\n,c => cn.compl ! n ! c ++ np.s ! Nom
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
--2 Possessive and partitive constructs
|
--2 Possessive and partitive constructs
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
resource NounMorphoHun = ParamHun ** open Prelude, Predef in {
|
resource NounMorphoHun = ParamHun ** open Prelude, Predef in {
|
||||||
|
|
||||||
oper
|
oper
|
||||||
Noun = {s : Number => Case => Str ; h : Harm} ;
|
Noun = {s : Number => CaseStem => Str ; h : Harm} ;
|
||||||
|
|
||||||
-- Paradigm functions
|
-- Paradigm functions
|
||||||
-- http://www.cse.chalmers.se/~aarne/articles/smart-preprint.pdf
|
-- http://www.cse.chalmers.se/~aarne/articles/smart-preprint.pdf
|
||||||
@@ -15,7 +15,7 @@ oper
|
|||||||
in nAlmá ** {
|
in nAlmá ** {
|
||||||
s = \\n,c => case <n,c> of {
|
s = \\n,c => case <n,c> of {
|
||||||
-- Singular nominative uses the given form, e.g. "alma" or "kefe"
|
-- Singular nominative uses the given form, e.g. "alma" or "kefe"
|
||||||
<Sg,Nom> => alma ;
|
<Sg,NomFull> => alma ;
|
||||||
|
|
||||||
-- The rest of the forms are formed with the regular constructor,
|
-- The rest of the forms are formed with the regular constructor,
|
||||||
-- using "almá" or "kefé" as the stem.
|
-- using "almá" or "kefé" as the stem.
|
||||||
@@ -35,8 +35,8 @@ oper
|
|||||||
s = \\n,c => case <n,c> of {
|
s = \\n,c => case <n,c> of {
|
||||||
|
|
||||||
-- All plural forms and Sg Acc, Sg Sup use the "lova" stem
|
-- All plural forms and Sg Acc, Sg Sup use the "lova" stem
|
||||||
<Pl,_>| <Sg,Acc> => nLova.s ! n ! c ;
|
<Pl,_>| <Sg,AccFull> => nLova.s ! n ! c ;
|
||||||
<Sg,Sup> => nLov.s ! n ! c ;
|
<Sg,SupFull> => nLov.s ! n ! c ;
|
||||||
|
|
||||||
-- The rest of the forms are formed with the regular constructor,
|
-- The rest of the forms are formed with the regular constructor,
|
||||||
-- using "ló" as the stem.
|
-- using "ló" as the stem.
|
||||||
@@ -74,8 +74,8 @@ oper
|
|||||||
in nMajmo ** {
|
in nMajmo ** {
|
||||||
s = \\n,c => case <n,c> of {
|
s = \\n,c => case <n,c> of {
|
||||||
-- All plural forms and Sg Acc and Sg Sup use the "majmo" stem
|
-- All plural forms and Sg Acc and Sg Sup use the "majmo" stem
|
||||||
<Pl,_> | <Sg,Acc> => nMajmo.s ! n ! c ;
|
<Pl,_> | <Sg,AccFull> => nMajmo.s ! n ! c ;
|
||||||
<Sg,Sup> => nMajmo.s ! n ! c ;
|
<Sg,SupFull> => nMajmo.s ! n ! c ;
|
||||||
|
|
||||||
-- The rest of the forms are formed with the regular constructor,
|
-- The rest of the forms are formed with the regular constructor,
|
||||||
-- using "majom" as the stem.
|
-- using "majom" as the stem.
|
||||||
@@ -93,7 +93,7 @@ oper
|
|||||||
in nTolla ** {
|
in nTolla ** {
|
||||||
s = \\n,c => case <n,c> of {
|
s = \\n,c => case <n,c> of {
|
||||||
-- All plural forms and Sg Acc use the "tolla" stem
|
-- All plural forms and Sg Acc use the "tolla" stem
|
||||||
<Pl,_> | <Sg,Acc> => nTolla.s ! n ! c ;
|
<Pl,_> | <Sg,AccFull> => nTolla.s ! n ! c ;
|
||||||
|
|
||||||
-- The rest of the forms are formed with the regular constructor,
|
-- The rest of the forms are formed with the regular constructor,
|
||||||
-- using "toll" as the stem.
|
-- using "toll" as the stem.
|
||||||
@@ -300,22 +300,28 @@ oper
|
|||||||
harm1 : Str -> HarmForms = \i -> harm i i ;
|
harm1 : Str -> HarmForms = \i -> harm i i ;
|
||||||
|
|
||||||
-- Variant of case forms when the noun stem ends in consonant.
|
-- Variant of case forms when the noun stem ends in consonant.
|
||||||
endCaseCons : Case -> HarmForms = \c -> case c of {
|
endCaseCons : CaseStem -> HarmForms = \c -> case c of {
|
||||||
|
AccFull => harm3 "ot" "et" "öt" ;
|
||||||
|
SupFull => harm3 "on" "en" "ön" ;
|
||||||
|
_ => harm1 []
|
||||||
|
} ;
|
||||||
|
|
||||||
|
endCase : Case -> HarmForms = \c -> case c of {
|
||||||
|
Nom => harm1 [] ;
|
||||||
Acc => harm3 "ot" "et" "öt" ;
|
Acc => harm3 "ot" "et" "öt" ;
|
||||||
Sup => harm3 "on" "en" "ön" ;
|
Dat => harm "nak" "nek" ;
|
||||||
Ins => harm "al" "el" ;
|
Ins => harm "al" "el" ;
|
||||||
Tra => harm "á" "é" ;
|
Tra => harm "á" "é" ;
|
||||||
Dat => harm "nak" "nek" ;
|
Ill => harm "ba" "be" ;
|
||||||
_Nom => harm1 []
|
Ine => harm "ban" "ben" ;
|
||||||
-- All => harm3 "hoz" "hez" "höz" ;
|
Ela => harm "ból" "ből" ;
|
||||||
-- Ade => harm "nál" "nél" ;
|
All => harm3 "hoz" "hez" "höz" ;
|
||||||
-- Abl => harm "tól" "től" ;
|
Ade => harm "nál" "nél" ;
|
||||||
-- Sub => harm "ra" "re" ;
|
Abl => harm "tól" "től" ;
|
||||||
-- Ill => harm "ba" "be" ;
|
Sub => harm "ra" "re" ;
|
||||||
-- Ine => harm "ban" "ben" ;
|
Sup => harm3 "on" "en" "ön" ;
|
||||||
-- Ela => harm "ból" "ből" ;
|
Del => harm "ról" "ről" ;
|
||||||
-- Del => harm "ról" "ről" ;
|
Cau => harm1 "ért"
|
||||||
-- Cau => harm1 "ért" ;
|
|
||||||
-- Ess => harm "stul" "stül" ; -- Essive-modal 'with <the noun> and its parts'
|
-- Ess => harm "stul" "stül" ; -- Essive-modal 'with <the noun> and its parts'
|
||||||
-- Ter => harm1 "ig" ; -- Terminative 'as far as <the noun>'
|
-- Ter => harm1 "ig" ; -- Terminative 'as far as <the noun>'
|
||||||
-- For => harm1 "ként" ; -- Formal 'as <the noun>'
|
-- For => harm1 "ként" ; -- Formal 'as <the noun>'
|
||||||
@@ -323,25 +329,23 @@ oper
|
|||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- Variant where accusative has the allomorph -at
|
-- Variant where accusative has the allomorph -at
|
||||||
endCaseConsAccAt : Case -> HarmForms = \c -> case c of {
|
endCaseConsAccAt : CaseStem -> HarmForms = \c -> case c of {
|
||||||
Acc => harm3 "at" "et" "öt" ;
|
AccFull => harm3 "at" "et" "öt" ;
|
||||||
_ => endCaseCons c
|
_ => endCaseCons c
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- Variant where accusative has the allomorph -t for consonants
|
-- Variant where accusative has the allomorph -t for consonants
|
||||||
-- Examples: "pénz, bor, orr, szín, lány, kés, dal"
|
-- Examples: "pénz, bor, orr, szín, lány, kés, dal"
|
||||||
endCaseConsAcc : Case -> HarmForms = \c -> case c of {
|
endCaseConsAcc : CaseStem -> HarmForms = \c -> case c of {
|
||||||
Acc => harm1 "t" ;
|
AccFull => harm1 "t" ;
|
||||||
_ => endCaseCons c
|
_ => endCaseCons c
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- Variant of case forms when the noun stem ends in vowel.
|
-- Variant of case forms when the noun stem ends in vowel.
|
||||||
endCaseVow : Case -> HarmForms = \c -> case c of {
|
endCaseVow : CaseStem -> HarmForms = \c -> case c of {
|
||||||
Acc => harm1 "t" ;
|
AccFull => harm1 "t" ;
|
||||||
Sup => harm1 "n" ;
|
SupFull => harm1 "n" ;
|
||||||
Ins => harm "val" "vel" ;
|
InsTraStem => harm1 "v" ;
|
||||||
Tra => harm "vá" "vé" ;
|
|
||||||
|
|
||||||
-- Other forms are shared with endCaseCons.
|
-- Other forms are shared with endCaseCons.
|
||||||
_ => endCaseCons c
|
_ => endCaseCons c
|
||||||
} ;
|
} ;
|
||||||
@@ -368,7 +372,7 @@ oper
|
|||||||
mkNounHarm : Harm -> (plural : Str) -> Str -> Noun = mkNounHarmAcc True ;
|
mkNounHarm : Harm -> (plural : Str) -> Str -> Noun = mkNounHarmAcc True ;
|
||||||
|
|
||||||
mkNounHarmAcc : (useAt : Bool) -> Harm -> (plural : Str) -> Str -> Noun = \useAt,h,plural,w ->
|
mkNounHarmAcc : (useAt : Bool) -> Harm -> (plural : Str) -> Str -> Noun = \useAt,h,plural,w ->
|
||||||
let endCaseSg : Case -> HarmForms = case <useAt, w> of {
|
let endCaseSg : CaseStem -> HarmForms = case <useAt, w> of {
|
||||||
<_,_ + #v> => endCaseVow ;
|
<_,_ + #v> => endCaseVow ;
|
||||||
<_,_ + #v + ("sz"|"z"|"s"|"zs"|"j"
|
<_,_ + #v + ("sz"|"z"|"s"|"zs"|"j"
|
||||||
|"ly"|"l"|"r"|"n"|"ny"|"ssz"|"zz"
|
|"ly"|"l"|"r"|"n"|"ny"|"ssz"|"zz"
|
||||||
@@ -376,7 +380,7 @@ oper
|
|||||||
|"nz")> => endCaseConsAcc ;
|
|"nz")> => endCaseConsAcc ;
|
||||||
<True,_> => endCaseConsAccAt ;
|
<True,_> => endCaseConsAccAt ;
|
||||||
_ => endCaseCons } ;
|
_ => endCaseCons } ;
|
||||||
endCasePl : Case -> HarmForms = case <plural, useAt> of {
|
endCasePl : CaseStem -> HarmForms = case <plural, useAt> of {
|
||||||
<"ak",_> => endCaseConsAccAt ;
|
<"ak",_> => endCaseConsAccAt ;
|
||||||
<_,True> => endCaseConsAccAt ;
|
<_,True> => endCaseConsAccAt ;
|
||||||
_ => endCaseCons } ;
|
_ => endCaseCons } ;
|
||||||
@@ -390,12 +394,12 @@ oper
|
|||||||
s = table {
|
s = table {
|
||||||
Sg => table {
|
Sg => table {
|
||||||
-- Double the last letter (if consonant) before Ins, Tra
|
-- Double the last letter (if consonant) before Ins, Tra
|
||||||
c@(Ins|Tra) => duplConsStem + endCaseSg c ! h ;
|
c@(InsTraStem) => duplConsStem + endCaseSg c ! h ;
|
||||||
c@_ => w + endCaseSg c ! h } ;
|
c@_ => w + endCaseSg c ! h } ;
|
||||||
|
|
||||||
Pl => table {
|
Pl => table {
|
||||||
-- Double the plural k before Ins, Tra
|
-- Double the plural k before Ins, Tra
|
||||||
c@(Ins|Tra) => w + plural + "k" + endCasePl c ! h ;
|
c@(InsTraStem) => w + plural + "k" + endCasePl c ! h ;
|
||||||
|
|
||||||
-- endCaseCons, because we only use -k as plural morpheme.
|
-- endCaseCons, because we only use -k as plural morpheme.
|
||||||
-- If we add possessive forms with allomorph -i, then revise.
|
-- If we add possessive forms with allomorph -i, then revise.
|
||||||
|
|||||||
@@ -20,27 +20,26 @@ oper
|
|||||||
|
|
||||||
param
|
param
|
||||||
|
|
||||||
Case =
|
CaseStem =
|
||||||
Nom | Acc -- Practical to have core cases as full strings
|
NomFull | AccFull | SupFull -- These may use 2-3 different stems
|
||||||
| Dat -- Would be nice but is very regular, so skip it
|
| InsTraStem -- Instrumental and translative: -v after vowels
|
||||||
| Sup -- Depends on the word which stem it uses
|
|
||||||
-- | All -- Can have irregularities in suffix (k)
|
|
||||||
| Ins | Tra -- Different for vowels and consonants
|
|
||||||
| OblStem ; -- The rest of the cases are regular and attach to this stem
|
| OblStem ; -- The rest of the cases are regular and attach to this stem
|
||||||
-- | Ill | Ine | Ela | Ade | Abl | Sub | Sup | Del -- Locatives
|
|
||||||
-- | Cau -- Causal-final 'for the purpose of, for the reason that'
|
Case =
|
||||||
-- | Ins -- Instrumental
|
Nom | Acc | Dat
|
||||||
-- | Tra -- Translative
|
| Ill | Ine | Ela | All | Ade | Abl | Sub | Sup | Del -- Locatives
|
||||||
|
| Cau -- Causal-final 'for the purpose of, for the reason that'
|
||||||
|
| Ins -- Instrumental
|
||||||
|
| Tra -- Translative
|
||||||
-- | Ess | Ter | For
|
-- | Ess | Ter | For
|
||||||
-- | Tem -- Temporal, e.g. hatkor ‘six o’clock’ (from hat ‘6’)
|
-- | Tem -- Temporal, e.g. hatkor ‘six o’clock’ (from hat ‘6’)
|
||||||
|
;
|
||||||
|
|
||||||
SubjCase = SCNom | SCDat ; -- Limited set of subject cases
|
SubjCase = SCNom | SCDat ; -- Limited set of subject cases
|
||||||
|
|
||||||
Possessor = NoPoss | Poss Number Person ;
|
Possessor = NoPoss | Poss Number Person ;
|
||||||
|
|
||||||
oper
|
oper
|
||||||
case2stem : Case -> Case = id Case ; -- TODO add stems and cases as separate types
|
|
||||||
|
|
||||||
caseTable : (x1,_,_,_,_,_,_,_,_,_,_,_,_,_,x15 : Str) -> Case=>Str =
|
caseTable : (x1,_,_,_,_,_,_,_,_,_,_,_,_,_,x15 : Str) -> Case=>Str =
|
||||||
\n,a,d,il,ine,el,al,ad,ab,sub,sup,del,ca,ins,tra -> table {
|
\n,a,d,il,ine,el,al,ad,ab,sub,sup,del,ca,ins,tra -> table {
|
||||||
@@ -49,7 +48,6 @@ oper
|
|||||||
Dat => d ;
|
Dat => d ;
|
||||||
Ins => ins ;
|
Ins => ins ;
|
||||||
Tra => tra ;
|
Tra => tra ;
|
||||||
OblStem => init a ;
|
|
||||||
Sup => sup ;
|
Sup => sup ;
|
||||||
Sub => sub ;
|
Sub => sub ;
|
||||||
Del => del ;
|
Del => del ;
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ concrete PhraseHun of Phrase = CatHun ** open Prelude, ResHun in {
|
|||||||
UttNP = \np -> {s = np.s ! Nom} ;
|
UttNP = \np -> {s = np.s ! Nom} ;
|
||||||
UttVP vp = {s = vp.obj ++ vp.adv ++ vp.s ! VInf} ;
|
UttVP vp = {s = vp.obj ++ vp.adv ++ vp.s ! VInf} ;
|
||||||
UttAdv adv = adv ;
|
UttAdv adv = adv ;
|
||||||
UttCN cn = {s = cn.s ! Sg ! Nom} ;
|
UttCN cn = {s = linCN cn} ;
|
||||||
UttCard n = {s = n.s ! Indep} ;
|
UttCard n = {s = n.s ! Indep} ;
|
||||||
UttAP ap = {s = ap.s ! Sg ++ ap.compar} ;
|
UttAP ap = {s = ap.s ! Sg ++ ap.compar} ;
|
||||||
UttInterj i = i ;
|
UttInterj i = i ;
|
||||||
|
|||||||
@@ -14,14 +14,28 @@ resource ResHun = NounMorphoHun ** open Prelude, Predef in {
|
|||||||
|
|
||||||
oper
|
oper
|
||||||
CNoun : Type = Noun ** {
|
CNoun : Type = Noun ** {
|
||||||
rs : Number => Case => Str ;
|
compl : Number => Case => Str ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
mkCaseNoun : Str -> Number => Case => Str = \s ->
|
||||||
|
\\n,c => caseFromStem False c (mkNoun s) n ;
|
||||||
|
mkCaseNoun2 : (n,a : Str) -> Number => Case => Str = \no,ac ->
|
||||||
|
\\n,c => caseFromStem False c (regNounNomAcc no ac) n ;
|
||||||
|
|
||||||
|
caseFromStem : Bool -> Case -> Noun -> Number -> Str = \usebind,cas,cn,n ->
|
||||||
|
case cas of {
|
||||||
|
Nom => cn.s ! n ! NomFull ;
|
||||||
|
Acc => cn.s ! n ! AccFull ;
|
||||||
|
Sup => cn.s ! n ! SupFull ;
|
||||||
|
Ins => glueIf usebind (cn.s ! n ! InsTraStem) (endCase Ins ! cn.h) ;
|
||||||
|
Tra => glueIf usebind (cn.s ! n ! InsTraStem) (endCase Tra ! cn.h) ;
|
||||||
|
_ => applyOblCase usebind (endCase cas) n cn
|
||||||
|
} ;
|
||||||
|
|
||||||
BaseNP : Type = {
|
BaseNP : Type = {
|
||||||
agr : Person*Number ;
|
agr : Person*Number ;
|
||||||
objdef : ObjDef ;
|
objdef : ObjDef ;
|
||||||
empty : Str ; -- standard trick for pro-drop
|
empty : Str ; -- standard trick for pro-drop
|
||||||
h : Harm ;
|
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
NounPhrase : Type = BaseNP ** {
|
NounPhrase : Type = BaseNP ** {
|
||||||
@@ -39,12 +53,12 @@ oper
|
|||||||
indeclNP : Str -> NounPhrase = \s -> emptyNP ** {s = \\c => s} ;
|
indeclNP : Str -> NounPhrase = \s -> emptyNP ** {s = \\c => s} ;
|
||||||
|
|
||||||
defNP : Str -> Number -> NounPhrase = \s,n -> emptyNP ** {
|
defNP : Str -> Number -> NounPhrase = \s,n -> emptyNP ** {
|
||||||
s = (mkNoun s).s ! n ;
|
s = mkCaseNoun s ! n ;
|
||||||
n = n ;
|
n = n ;
|
||||||
objdef = Def ;
|
objdef = Def ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
linCN : CNoun -> Str = \cn -> cn.s ! Sg ! Nom ++ cn.rs ! Sg ! Nom ;
|
linCN : CNoun -> Str = \cn -> cn.s ! Sg ! NomFull ++ cn.compl ! Sg ! Nom ;
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
-- Pronouns
|
-- Pronouns
|
||||||
|
|
||||||
@@ -69,8 +83,8 @@ oper
|
|||||||
} ;
|
} ;
|
||||||
|
|
||||||
mkQuant : (s,sp : Str) -> Quant = \s,sp -> {
|
mkQuant : (s,sp : Str) -> Quant = \s,sp -> {
|
||||||
s = (mkNoun s).s ;
|
s = mkCaseNoun s ;
|
||||||
sp = (mkNoun sp).s ;
|
sp = mkCaseNoun sp ;
|
||||||
isIndefArt = False ;
|
isIndefArt = False ;
|
||||||
objdef = Def ;
|
objdef = Def ;
|
||||||
caseagr = True ;
|
caseagr = True ;
|
||||||
@@ -87,7 +101,7 @@ oper
|
|||||||
|
|
||||||
mkDet : (s : Str) -> ObjDef -> Number -> Bool -> Determiner = \s,d,n,ca -> {
|
mkDet : (s : Str) -> ObjDef -> Number -> Bool -> Determiner = \s,d,n,ca -> {
|
||||||
s,
|
s,
|
||||||
sp = (mkNoun s).s ! n ;
|
sp = mkCaseNoun s ! n ;
|
||||||
n = n ;
|
n = n ;
|
||||||
numtype = NoNum ;
|
numtype = NoNum ;
|
||||||
objdef = d ;
|
objdef = d ;
|
||||||
@@ -97,7 +111,7 @@ oper
|
|||||||
mkDet2 : (n,a : Str) -> ObjDef -> Number -> Bool -> Determiner = \no,ac,d,n,ca ->
|
mkDet2 : (n,a : Str) -> ObjDef -> Number -> Bool -> Determiner = \no,ac,d,n,ca ->
|
||||||
let reg : Determiner = mkDet no d n ca
|
let reg : Determiner = mkDet no d n ca
|
||||||
in reg ** {
|
in reg ** {
|
||||||
s,sp = (regNounNomAcc no ac).s ! n ;
|
s,sp = mkCaseNoun2 no ac ! n ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|
||||||
@@ -128,35 +142,29 @@ oper
|
|||||||
-- TODO: personal suffixes, e.g. felettem, általam, not *felett/által én
|
-- TODO: personal suffixes, e.g. felettem, általam, not *felett/által én
|
||||||
Adposition : Type = {
|
Adposition : Type = {
|
||||||
pr : Str ; -- Preposition
|
pr : Str ; -- Preposition
|
||||||
s : HarmForms ; -- Postposition
|
s : Str ; -- Postposition
|
||||||
c : Case ;
|
c : Case ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
nomAdp : Str -> Adposition = \s -> postpos Nom (harm1 s) ;
|
nomAdp : Str -> Adposition = \s -> postpos Nom s ;
|
||||||
|
|
||||||
caseAdp = overload {
|
caseAdp = overload {
|
||||||
caseAdp : Case -> Adposition = \c -> postpos c (harm1 []) ;
|
caseAdp : Case -> Adposition = \c -> postpos c [] ;
|
||||||
caseAdp : Case -> Str -> Adposition = \c,s -> postpos c (harm1 s) ;
|
caseAdp : Case -> Str -> Adposition = \c,s -> postpos c s ;
|
||||||
caseAdp : Str -> Adposition = \ért ->
|
|
||||||
postpos OblStem (harm1 ért) ;
|
|
||||||
caseAdp : (x,y : Str) -> Adposition = \nál,nél ->
|
|
||||||
postpos OblStem (harm nál nél) ;
|
|
||||||
caseAdp : (x,y,z : Str) -> Adposition = \hoz,hez,höz ->
|
|
||||||
postpos OblStem (harm3 hoz hez höz)
|
|
||||||
} ;
|
} ;
|
||||||
postpos : Case -> HarmForms -> Adposition = \c,h-> {s=h ; c=c ; pr=[]} ;
|
postpos : Case -> Str -> Adposition = \c,s-> {s=s ; c=c ; pr=[]} ;
|
||||||
prepos : Case -> Str -> Adposition = \c,s -> {s=harm1 [] ; c=c ; pr=s} ;
|
prepos : Case -> Str -> Adposition = \c,s -> {s=[] ; c=c ; pr=s} ;
|
||||||
|
|
||||||
emptyAdp : Adposition = nomAdp [] ;
|
emptyAdp : Adposition = nomAdp [] ;
|
||||||
|
|
||||||
applyAdp : Adposition -> NounPhrase -> Str = \adp,np ->
|
applyAdp : Adposition -> NounPhrase -> Str = \adp,np ->
|
||||||
adp.pr ++ glueIf adp.c (np.s ! adp.c) (adp.s ! np.h) ;
|
adp.pr ++ np.s ! adp.c ++ adp.s ;
|
||||||
|
|
||||||
glueIf : Case -> (_,_ : Str) -> Str = \cas,a,b ->
|
applyOblCase : Bool -> HarmForms -> Number -> Noun -> Str = \usebind,adp,n,np ->
|
||||||
case cas of {
|
glueIf usebind (np.s ! n ! OblStem) (adp ! np.h) ;
|
||||||
OblStem => glue a b ;
|
|
||||||
_ => a ++ b
|
glueIf : Bool -> (_,_ : Str) -> Str = \f,a,b ->
|
||||||
} ;
|
if_then_Str f (glue a b) (a + b) ;
|
||||||
|
|
||||||
------------------
|
------------------
|
||||||
-- Conj
|
-- Conj
|
||||||
|
|||||||
@@ -106,12 +106,12 @@ lin by8means_Prep = caseAdp Ins ;
|
|||||||
lin for_Prep = caseAdp Dat ;
|
lin for_Prep = caseAdp Dat ;
|
||||||
-- lin from_Prep = mkPrep "" ;
|
-- lin from_Prep = mkPrep "" ;
|
||||||
-- lin in8front_Prep = mkPrep "" ;
|
-- lin in8front_Prep = mkPrep "" ;
|
||||||
lin in_Prep = caseAdp "ban" "ben" ;
|
lin in_Prep = caseAdp Ine ;
|
||||||
lin on_Prep = caseAdp Sup ;
|
lin on_Prep = caseAdp Sup ;
|
||||||
-- lin part_Prep = casePrep ;
|
-- lin part_Prep = casePrep ;
|
||||||
-- lin possess_Prep = -- Suffix attaches to possessee, not possessor
|
-- lin possess_Prep = -- Suffix attaches to possessee, not possessor
|
||||||
-- lin through_Prep = mkPrep ;
|
-- lin through_Prep = mkPrep ;
|
||||||
lin to_Prep = caseAdp "hoz" "hez" "höz" ;
|
lin to_Prep = caseAdp All ;
|
||||||
lin under_Prep = nomAdp "alatt" ;
|
lin under_Prep = nomAdp "alatt" ;
|
||||||
-- lin with_Prep = mkPrep "" ;
|
-- lin with_Prep = mkPrep "" ;
|
||||||
-- lin without_Prep = mkPrep "" ;
|
-- lin without_Prep = mkPrep "" ;
|
||||||
|
|||||||
@@ -118,9 +118,14 @@ lin
|
|||||||
-- : CN -> Comp ;
|
-- : CN -> Comp ;
|
||||||
CompCN cn = UseCopula ** {
|
CompCN cn = UseCopula ** {
|
||||||
s = \\vf => case vf of {
|
s = \\vf => case vf of {
|
||||||
VPres P3 n => cn.s ! n ! Nom ;
|
VPres P3 n => cn.s ! n ! NomFull
|
||||||
VPres _ n => cn.s ! n ! Nom ++ copula.s ! vf ;
|
++ cn.compl ! n ! Nom ;
|
||||||
_ => cn.s ! Sg ! Nom ++ copula.s ! vf} ;
|
VPres _ n => cn.s ! n ! NomFull
|
||||||
|
++ cn.compl ! n ! Nom
|
||||||
|
++ copula.s ! vf ;
|
||||||
|
_ => cn.s ! Sg ! NomFull
|
||||||
|
++ cn.compl ! Sg ! Nom
|
||||||
|
++ copula.s ! vf} ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- : NP -> Comp ;
|
-- : NP -> Comp ;
|
||||||
|
|||||||
Reference in New Issue
Block a user