renamed mkNP to makeNP in Paradigms; added overloaded Paradigms to all 10

This commit is contained in:
aarne
2007-07-06 08:47:59 +00:00
parent 9f29d502cb
commit 982ef7b015
19 changed files with 604 additions and 852 deletions

View File

@@ -328,7 +328,7 @@ resource ParadigmsAra = open
mkN3 = \n,p,q -> n ** {lock_N3 = <> ; c2 = p ; c3 = q} ; mkN3 = \n,p,q -> n ** {lock_N3 = <> ; c2 = p ; c3 = q} ;
mkNP : (_,_,_ : Str) -> PerGenNum -> NP = \ana,nI,I,pgn -> makeNP : (_,_,_ : Str) -> PerGenNum -> NP = \ana,nI,I,pgn ->
{ s = { s =
table { table {
Nom => ana; Nom => ana;

View File

@@ -130,7 +130,7 @@ oper
-- To form a noun phrase that can also be plural, -- To form a noun phrase that can also be plural,
-- you can use the worst-case function. -- you can use the worst-case function.
mkNP : Str -> Gender -> Number -> NP ; makeNP : Str -> Gender -> Number -> NP ;
----2 Adjectives ----2 Adjectives
-- --
@@ -302,7 +302,7 @@ oper
mkN3 = \n,p,q -> n ** {lock_N3 = <> ; c2 = p ; c3 = q} ; mkN3 = \n,p,q -> n ** {lock_N3 = <> ; c2 = p ; c3 = q} ;
mkPN x g = {s = x ; g = g} ** {lock_PN = <>} ; mkPN x g = {s = x ; g = g} ** {lock_PN = <>} ;
mkNP x g n = {s = (pn2np (mkPN x g)).s; a = agrP3 g n ; hasClit = False} ** {lock_NP = <>} ; makeNP x g n = {s = (pn2np (mkPN x g)).s; a = agrP3 g n ; hasClit = False} ** {lock_NP = <>} ;
-- --
mkA a b c d e = mkA a b c d e =
compADeg {s = \\_ => (mkAdj a b c d e).s ; isPre = False ; lock_A = <>} ; compADeg {s = \\_ => (mkAdj a b c d e).s ; isPre = False ; lock_A = <>} ;

View File

@@ -64,31 +64,36 @@ oper
--2 Nouns --2 Nouns
-- Worst case: give all four forms. The gender is computed from the mkN : overload {
-- last letter of the second form (if "n", then $utrum$, otherwise $neutrum$).
mkN : (dreng,drengen,drenge,drengene : Str) -> N ;
-- The regular function takes the singular indefinite form -- The regular function takes the singular indefinite form
-- and computes the other forms and the gender by a heuristic. -- and computes the other forms and the gender by a heuristic.
-- The heuristic is that all nouns are $utrum$ with the -- The heuristic is that all nouns are $utrum$ with the
-- plural ending "er" or "r". -- plural ending "er" or "r".
regN : Str -> N ; mkN : (bil : Str) -> N ;
-- Giving gender manually makes the heuristic more reliable. -- Giving gender manually makes the heuristic more reliable.
regGenN : Str -> Gender -> N ; mkN : (hus : Str) -> Gender -> N ;
-- This function takes the singular indefinite and definite forms; the -- This function takes the singular indefinite and definite forms; the
-- gender is computed from the definite form. -- gender is computed from the definite form.
mk2N : (bil,bilen : Str) -> N ; mkN : (bil,bilen : Str) -> N ;
-- This function takes the singular indefinite and definite and the plural -- This function takes the singular indefinite and definite and the plural
-- indefinite -- indefinite
mk3N : (bil,bilen,biler : Str) -> N ; mkN : (bil,bilen,biler : Str) -> N ;
-- Worst case: give all four forms. The gender is computed from the
-- last letter of the second form (if "n", then $utrum$, otherwise $neutrum$).
mkN : (dreng,drengen,drenge,drengene : Str) -> N ;
} ;
--3 Compound nouns --3 Compound nouns
@@ -129,60 +134,36 @@ oper
-- --
-- Proper names, with a regular genitive, are formed as follows -- Proper names, with a regular genitive, are formed as follows
mkPN : Str -> Gender -> PN ; -- Paris neutrum mkPN : overload {
regPN : Str -> PN ; -- utrum gender mkPN : Str -> PN ; -- utrum
mkPN : Str -> Gender -> PN ;
mkPN : N -> PN ;
} ;
-- Sometimes you can reuse a common noun as a proper name, e.g. "Bank".
nounPN : N -> PN ;
-- To form a noun phrase that can also be plural and have an irregular
-- genitive, you can use the worst-case function.
mkNP : Str -> Str -> Number -> Gender -> NP ;
--2 Adjectives --2 Adjectives
-- Non-comparison one-place adjectives need three forms: -- The regular pattern works for many adjectives, e.g. those ending
-- with "ig". Two, five, or at worst five forms are sometimes needed.
mkA : (galen,galet,galne : Str) -> A ; mkA : overload {
mkA : (fin : Str) -> A ;
mkA : (fin,fint : Str) -> A ;
mkA : (galen,galet,galne : Str) -> A ;
mkA : (stor,stort,store,storre,storst : Str) -> A ;
-- For regular adjectives, the other forms are derived. -- If comparison is formed by "mer", "mest", as in general for
-- long adjective, the following pattern is used:
regA : Str -> A ; mkA : A -> A ; -- -/mer/mest norsk
} ;
-- In most cases, two forms are enough.
mk2A : (stor,stort : Str) -> A ;
--3 Two-place adjectives --3 Two-place adjectives
-- --
-- Two-place adjectives need a preposition for their second argument. -- Two-place adjectives need a preposition for their second argument.
mkA2 : A -> Prep -> A2 ; mkA2 : A -> Prep -> A2 ;
-- Comparison adjectives may need as many as five forms.
mkADeg : (stor,stort,store,storre,storst : Str) -> A ;
-- The regular pattern works for many adjectives, e.g. those ending
-- with "ig".
regADeg : Str -> A ;
-- Just the comparison forms can be irregular.
irregADeg : (tung,tyngre,tyngst : Str) -> A ;
-- Sometimes just the positive forms are irregular.
mk3ADeg : (galen,galet,galna : Str) -> A ;
mk2ADeg : (bred,bredt : Str) -> A ;
-- If comparison is formed by "mer", "mest", as in general for
-- long adjective, the following pattern is used:
compoundA : A -> A ; -- -/mer/mest norsk
--2 Adverbs --2 Adverbs
@@ -201,22 +182,34 @@ oper
--2 Verbs --2 Verbs
-- --
-- The worst case needs six forms.
mkV : (spise,spiser,spises,spiste,spist,spis : Str) -> V ; mkV : overload {
-- The 'regular verb' function is the first conjugation. -- The 'regular verb' function is the first conjugation.
regV : (snakke : Str) -> V ; mkV : (snakke : Str) -> V ;
-- The almost regular verb function needs the infinitive and the preteritum. -- The almost regular verb function needs the infinitive and the preteritum.
mk2V : (leve,levde : Str) -> V ; mkV : (leve,levde : Str) -> V ;
-- There is an extensive list of irregular verbs in the module $IrregDan$. -- There is an extensive list of irregular verbs in the module $IrregDan$.
-- In practice, it is enough to give three forms, as in school books. -- In practice, it is enough to give three forms, as in school books.
irregV : (drikke, drak, drukket : Str) -> V ; mkV : (drikke, drakk, drukket : Str) -> V ;
-- The worst case needs six forms.
mkV : (spise,spiser,spises,spiste,spist,spis : Str) -> V ;
--3 Verbs with a particle.
--
-- The particle, such as in "lukke op", is given as a string.
mkV : V -> Str -> V ;
} ;
--3 Verbs with 'være' as auxiliary --3 Verbs with 'være' as auxiliary
@@ -227,12 +220,6 @@ oper
--3 Verbs with a particle
--
-- The particle, such as in "passe på", is given as a string.
partV : V -> Str -> V ;
--3 Deponent verbs --3 Deponent verbs
-- --
@@ -246,11 +233,14 @@ oper
--3 Two-place verbs --3 Two-place verbs
-- --
-- Two-place verbs need a preposition, except the special case with direct object. -- Two-place verbs need a preposition, except the special case with direct object.
-- (transitive verbs). Notice that a particle comes from the $V$. -- (transitive verbs). Notice that, if a particle is needed, it comes from the $V$.
mkV2 : V -> Prep -> V2 ; mkV2 : overload {
mkV2 : Str -> V2 ;
mkV2 : V -> V2 ;
mkV2 : V -> Prep -> V2 ;
} ;
dirV2 : V -> V2 ;
--3 Three-place verbs --3 Three-place verbs
-- --
@@ -315,18 +305,18 @@ oper
mkPrep p = {s = p ; lock_Prep = <>} ; mkPrep p = {s = p ; lock_Prep = <>} ;
noPrep = mkPrep [] ; noPrep = mkPrep [] ;
mkN x y z u = mkSubstantive x y z u ** {g = extNGen y ; lock_N = <>} ; mk4N x y z u = mkSubstantive x y z u ** {g = extNGen y ; lock_N = <>} ;
regN x = regGenN x Utr ; regN x = regGenN x Utr ;
regGenN x g = case last x of { regGenN x g = case last x of {
"e" => case g of { "e" => case g of {
Utr => mkN x (x + "n") (x + "r") (x + "rne") ; Utr => mk4N x (x + "n") (x + "r") (x + "rne") ;
Neutr => mkN x (x + "t") (x + "r") (init x + "ene") Neutr => mk4N x (x + "t") (x + "r") (init x + "ene")
} ; } ;
_ => case g of { _ => case g of {
Utr => mkN x (x + "en") (x + "er") (x + "erne") ; Utr => mk4N x (x + "en") (x + "er") (x + "erne") ;
Neutr => mkN x (x + "et") (x + "") (x + "ene") Neutr => mk4N x (x + "et") (x + "") (x + "ene")
} }
} ; } ;
@@ -336,21 +326,26 @@ oper
_ => mk3N x y x _ => mk3N x y x
} ; } ;
mk3N x y z = let u = ifTok Str x z "ene" "ne" in mkN x y z (z + u) ; mk3N x y z = let u = ifTok Str x z "ene" "ne" in mk4N x y z (z + u) ;
mkN2 = \n,p -> n ** {lock_N2 = <> ; c2 = p.s} ; mkN2 = \n,p -> n ** {lock_N2 = <> ; c2 = p.s} ;
regN2 n g = mkN2 (regGenN n g) (mkPreposition "av") ; regN2 n g = mkN2 (regGenN n g) (mkPreposition "av") ;
mkN3 = \n,p,q -> n ** {lock_N3 = <> ; c2 = p.s ; c3 = q.s} ; mkN3 = \n,p,q -> n ** {lock_N3 = <> ; c2 = p.s ; c3 = q.s} ;
mkPN n g = {s = \\c => mkCase c n ; g = g} ** {lock_PN = <>} ; mk2PN n g = {s = \\c => mkCase c n ; g = g} ** {lock_PN = <>} ;
regPN n = mkPN n utrum ; regPN n = mk2PN n utrum ;
nounPN n = {s = n.s ! singular ! Indef ; g = n.g ; lock_PN = <>} ; nounPN n = {s = n.s ! singular ! Indef ; g = n.g ; lock_PN = <>} ;
mkNP x y n g =
-- To form a noun phrase that can also be plural and have an irregular
-- genitive, you can use the worst-case function.
makeNP : Str -> Str -> Number -> Gender -> NP ;
makeNP x y n g =
{s = table {NPPoss _ => x ; _ => y} ; a = agrP3 g n ; {s = table {NPPoss _ => x ; _ => y} ; a = agrP3 g n ;
lock_NP = <>} ; lock_NP = <>} ;
mkA = mk3ADeg ; mk3A = mk3ADeg ;
mk2A a b = mkA a b (a + "e") ; mk2A a b = mk3A a b (a + "e") ;
regA a = (regADeg a) ** {lock_A = <>} ; regA a = (regADeg a) ** {lock_A = <>} ;
mkA2 a p = a ** {c2 = p.s ; lock_A2 = <>} ; mkA2 a p = a ** {c2 = p.s ; lock_A2 = <>} ;
@@ -377,7 +372,7 @@ oper
mkAdV x = ss x ** {lock_AdV = <>} ; mkAdV x = ss x ** {lock_AdV = <>} ;
mkAdA x = ss x ** {lock_AdA = <>} ; mkAdA x = ss x ** {lock_AdA = <>} ;
mkV a b c d e f = mkVerb6 a b c d e f ** mk6V a b c d e f = mkVerb6 a b c d e f **
{part = [] ; vtype = VAct ; lock_V = <> ; isVaere = False} ; {part = [] ; vtype = VAct ; lock_V = <> ; isVaere = False} ;
regV a = case last a of { regV a = case last a of {
@@ -400,7 +395,7 @@ oper
_ => drikke + "r" _ => drikke + "r"
} }
in in
mkV drikke drikker (drikke + "s") drakk drukket (mkImper drikk) ; mk6V drikke drikker (drikke + "s") drakk drukket (mkImper drikk) ;
vaereV v = { vaereV v = {
s = v.s ; s = v.s ;
@@ -425,8 +420,8 @@ oper
s = v.s ; part = v.part ; vtype = VRefl ; isVaere = False ; lock_V = <> s = v.s ; part = v.part ; vtype = VRefl ; isVaere = False ; lock_V = <>
} ; } ;
mkV2 v p = v ** {c2 = p.s ; lock_V2 = <>} ; mk2V2 v p = v ** {c2 = p.s ; lock_V2 = <>} ;
dirV2 v = mkV2 v (mkPrep []) ; dirV2 v = mk2V2 v (mkPrep []) ;
mkV3 v p q = v ** {c2 = p.s ; c3 = q.s ; lock_V3 = <>} ; mkV3 v p q = v ** {c2 = p.s ; c3 = q.s ; lock_V3 = <>} ;
dirV3 v p = mkV3 v noPrep p ; dirV3 v p = mkV3 v noPrep p ;
@@ -434,13 +429,13 @@ oper
mkV0 v = v ** {lock_V0 = <>} ; mkV0 v = v ** {lock_V0 = <>} ;
mkVS v = v ** {lock_VS = <>} ; mkVS v = v ** {lock_VS = <>} ;
mkV2S v p = mkV2 v p ** {lock_V2S = <>} ; mkV2S v p = mk2V2 v p ** {lock_V2S = <>} ;
mkVV v = v ** {c2 = "å" ; lock_VV = <>} ; mkVV v = v ** {c2 = "å" ; lock_VV = <>} ;
mkV2V v p t = mkV2 v p ** {s3 = t ; lock_V2V = <>} ; mkV2V v p t = mk2V2 v p ** {s3 = t ; lock_V2V = <>} ;
mkVA v = v ** {lock_VA = <>} ; mkVA v = v ** {lock_VA = <>} ;
mkV2A v p = mkV2 v p ** {lock_V2A = <>} ; mkV2A v p = mk2V2 v p ** {lock_V2A = <>} ;
mkVQ v = v ** {lock_VQ = <>} ; mkVQ v = v ** {lock_VQ = <>} ;
mkV2Q v p = mkV2 v p ** {lock_V2Q = <>} ; mkV2Q v p = mk2V2 v p ** {lock_V2Q = <>} ;
mkAS v = v ** {lock_A = <>} ; mkAS v = v ** {lock_A = <>} ;
mkA2S v p = mkA2 v p ** {lock_A = <>} ; mkA2S v p = mkA2 v p ** {lock_A = <>} ;
@@ -452,5 +447,73 @@ oper
AS, A2S, AV : Type = A ; AS, A2S, AV : Type = A ;
A2V : Type = A2 ; A2V : Type = A2 ;
---------------
mkN = overload {
mkN : Str -> N = regN ;
mkN : Str -> Gender -> N = regGenN ;
mkN : (bil,bilen : Str) -> N = mk2N ;
mkN : (bil,bilen,biler : Str) -> N = mk3N ;
mkN : (dreng,drengen,drenge,drengene : Str) -> N = mk4N ;
} ;
regN : Str -> N ;
regGenN : Str -> Gender -> N ;
mk2N : (bil,bilen : Str) -> N ;
mk3N : (bil,bilen,biler : Str) -> N ;
mk4N : (dreng,drengen,drenge,drengene : Str) -> N ;
mkPN = overload {
mkPN : Str -> PN = regPN ; -- masculine
mkPN : Str -> Gender -> PN = mk2PN ;
mkPN : N -> PN = nounPN ;
} ;
regPN : Str -> PN ; -- utrum
mk2PN : Str -> Gender -> PN ;
nounPN : N -> PN ;
mkA = overload {
mkA : (fin : Str) -> A = regADeg ;
mkA : (fin,fint : Str) -> A = mk2ADeg ;
mkA : (galen,galet,galne : Str) -> A = mk3ADeg ;
mkA : (stor,stort,store,storre,storst : Str) -> A = mkADeg ;
mkA : A -> A = compoundA ; -- -/mer/mest norsk
} ;
mk3A : (galen,galet,galne : Str) -> A ;
regA : Str -> A ;
mk2A : (stor,stort : Str) -> A ;
mkADeg : (stor,stort,store,storre,storst : Str) -> A ;
regADeg : Str -> A ;
irregADeg : (tung,tyngre,tyngst : Str) -> A ;
mk3ADeg : (galen,galet,galne : Str) -> A ;
mk2ADeg : (bred,bredt : Str) -> A ;
compoundA : A -> A ; -- -/mer/mest norsk
mkV = overload {
mkV : (snakke : Str) -> V = regV ;
mkV : (leve,levde : Str) -> V = mk2V ;
mkV : (drikke, drakk, drukket : Str) -> V = irregV ;
mkV : (spise,spiser,spises,spiste,spist,spis : Str) -> V = mk6V ;
mkV : V -> Str -> V = partV ;
} ;
regV : (snakke : Str) -> V ;
mk2V : (leve,levde : Str) -> V ;
irregV : (drikke, drakk, drukket : Str) -> V ;
mk6V : (spise,spiser,spises,spiste,spist,spis : Str) -> V ;
partV : V -> Str -> V ;
mkV2 = overload {
mkV2 : Str -> V2 = \s -> dirV2 (regV s) ;
mkV2 : V -> V2 = dirV2 ;
mkV2 : V -> Prep -> V2 = mk2V2 ;
} ;
mk2V2 : V -> Prep -> V2 ;
dirV2 : V -> V2 ;
} ; } ;

View File

@@ -4,6 +4,10 @@ It has been machine-generated from the source files; each chapter gives a link
to the relevant source files, which give more information. Some of the files have to the relevant source files, which give more information. Some of the files have
not yet been prepared so that the machine generated documentation has the right format. not yet been prepared so that the machine generated documentation has the right format.
Since the character encoding is UTF-8 for Russian and Latin-1 for other languages, you
may have to change the encoding preference of your browser when reading different
parts of the document.
The second-last chapter gives instructions on how to "browse" the library by The second-last chapter gives instructions on how to "browse" the library by
loading the grammars into the ``gf`` command editor. loading the grammars into the ``gf`` command editor.

View File

@@ -339,6 +339,7 @@ Source 2: <A HREF="../abstract/Cat.gf"><CODE>http://www.cs.chalmers.se/~aarne/GF
</TR> </TR>
</TABLE> </TABLE>
<P></P>
<A NAME="toc2"></A> <A NAME="toc2"></A>
<H1>Syntax Rules</H1> <H1>Syntax Rules</H1>
<P> <P>
@@ -1532,6 +1533,7 @@ Source: <A HREF="../api/Constructors.gf"><CODE>http://www.cs.chalmers.se/~aarne/
</TR> </TR>
</TABLE> </TABLE>
<P></P>
<A NAME="toc3"></A> <A NAME="toc3"></A>
<H1>Structural Words</H1> <H1>Structural Words</H1>
<P> <P>
@@ -2025,6 +2027,7 @@ Source: <A HREF="../abstract/Structural.gf"><CODE>http://www.cs.chalmers.se/~aar
</TR> </TR>
</TABLE> </TABLE>
<P></P>
<A NAME="toc4"></A> <A NAME="toc4"></A>
<H1>Paradigms for Danish</H1> <H1>Paradigms for Danish</H1>
<P> <P>
@@ -2093,30 +2096,30 @@ source <A HREF="../danish/ParadigmsDan.gf"><CODE>http://www.cs.chalmers.se/~aarn
</TR> </TR>
<TR> <TR>
<TD><CODE>mkN</CODE></TD> <TD><CODE>mkN</CODE></TD>
<TD><CODE>(dreng,drengen,drenge,drengene : Str) -&gt; N</CODE></TD> <TD><CODE>(bil : Str) -&gt; N</CODE></TD>
<TD>-</TD> <TD>-</TD>
</TR> </TR>
<TR> <TR>
<TD><CODE>regN</CODE></TD> <TD><CODE>mkN</CODE></TD>
<TD><CODE>Str -&gt; N</CODE></TD> <TD><CODE>(hus : Str) -&gt; Gender -&gt; N</CODE></TD>
<TD>-</TD> <TD>-</TD>
</TR> </TR>
<TR> <TR>
<TD><CODE>regGenN</CODE></TD> <TD><CODE>mkN</CODE></TD>
<TD><CODE>Str -&gt; Gender -&gt; N</CODE></TD>
<TD>-</TD>
</TR>
<TR>
<TD><CODE>mk2N</CODE></TD>
<TD><CODE>(bil,bilen : Str) -&gt; N</CODE></TD> <TD><CODE>(bil,bilen : Str) -&gt; N</CODE></TD>
<TD>-</TD> <TD>-</TD>
</TR> </TR>
<TR> <TR>
<TD><CODE>mk3N</CODE></TD> <TD><CODE>mkN</CODE></TD>
<TD><CODE>(bil,bilen,biler : Str) -&gt; N</CODE></TD> <TD><CODE>(bil,bilen,biler : Str) -&gt; N</CODE></TD>
<TD>-</TD> <TD>-</TD>
</TR> </TR>
<TR> <TR>
<TD><CODE>mkN</CODE></TD>
<TD><CODE>(dreng,drengen,drenge,drengene : Str) -&gt; N</CODE></TD>
<TD>-</TD>
</TR>
<TR>
<TD><CODE>mkN2</CODE></TD> <TD><CODE>mkN2</CODE></TD>
<TD><CODE>N -&gt; Prep -&gt; N2</CODE></TD> <TD><CODE>N -&gt; Prep -&gt; N2</CODE></TD>
<TD>-</TD> <TD>-</TD>
@@ -2133,22 +2136,27 @@ source <A HREF="../danish/ParadigmsDan.gf"><CODE>http://www.cs.chalmers.se/~aarn
</TR> </TR>
<TR> <TR>
<TD><CODE>mkPN</CODE></TD> <TD><CODE>mkPN</CODE></TD>
<TD><CODE>Str -&gt; Gender -&gt; PN</CODE></TD>
<TD><I>Paris neutrum</I></TD>
</TR>
<TR>
<TD><CODE>regPN</CODE></TD>
<TD><CODE>Str -&gt; PN</CODE></TD> <TD><CODE>Str -&gt; PN</CODE></TD>
<TD><I>utrum gender</I></TD> <TD><I>utrum</I></TD>
</TR> </TR>
<TR> <TR>
<TD><CODE>nounPN</CODE></TD> <TD><CODE>mkPN</CODE></TD>
<TD><CODE>Str -&gt; Gender -&gt; PN</CODE></TD>
<TD>-</TD>
</TR>
<TR>
<TD><CODE>mkPN</CODE></TD>
<TD><CODE>N -&gt; PN</CODE></TD> <TD><CODE>N -&gt; PN</CODE></TD>
<TD>-</TD> <TD>-</TD>
</TR> </TR>
<TR> <TR>
<TD><CODE>mkNP</CODE></TD> <TD><CODE>mkA</CODE></TD>
<TD><CODE>Str -&gt; Str -&gt; Number -&gt; Gender -&gt; NP</CODE></TD> <TD><CODE>(fin : Str) -&gt; A</CODE></TD>
<TD>-</TD>
</TR>
<TR>
<TD><CODE>mkA</CODE></TD>
<TD><CODE>(fin,fint : Str) -&gt; A</CODE></TD>
<TD>-</TD> <TD>-</TD>
</TR> </TR>
<TR> <TR>
@@ -2157,14 +2165,14 @@ source <A HREF="../danish/ParadigmsDan.gf"><CODE>http://www.cs.chalmers.se/~aarn
<TD>-</TD> <TD>-</TD>
</TR> </TR>
<TR> <TR>
<TD><CODE>regA</CODE></TD> <TD><CODE>mkA</CODE></TD>
<TD><CODE>Str -&gt; A</CODE></TD> <TD><CODE>(stor,stort,store,storre,storst : Str) -&gt; A</CODE></TD>
<TD>-</TD> <TD>-</TD>
</TR> </TR>
<TR> <TR>
<TD><CODE>mk2A</CODE></TD> <TD><CODE>mkA</CODE></TD>
<TD><CODE>(stor,stort : Str) -&gt; A</CODE></TD> <TD><CODE>A -&gt; A</CODE></TD>
<TD>-</TD> <TD><I>-/mer/mest norsk</I></TD>
</TR> </TR>
<TR> <TR>
<TD><CODE>mkA2</CODE></TD> <TD><CODE>mkA2</CODE></TD>
@@ -2172,36 +2180,6 @@ source <A HREF="../danish/ParadigmsDan.gf"><CODE>http://www.cs.chalmers.se/~aarn
<TD>-</TD> <TD>-</TD>
</TR> </TR>
<TR> <TR>
<TD><CODE>mkADeg</CODE></TD>
<TD><CODE>(stor,stort,store,storre,storst : Str) -&gt; A</CODE></TD>
<TD>-</TD>
</TR>
<TR>
<TD><CODE>regADeg</CODE></TD>
<TD><CODE>Str -&gt; A</CODE></TD>
<TD>-</TD>
</TR>
<TR>
<TD><CODE>irregADeg</CODE></TD>
<TD><CODE>(tung,tyngre,tyngst : Str) -&gt; A</CODE></TD>
<TD>-</TD>
</TR>
<TR>
<TD><CODE>mk3ADeg</CODE></TD>
<TD><CODE>(galen,galet,galna : Str) -&gt; A</CODE></TD>
<TD>-</TD>
</TR>
<TR>
<TD><CODE>mk2ADeg</CODE></TD>
<TD><CODE>(bred,bredt : Str) -&gt; A</CODE></TD>
<TD>-</TD>
</TR>
<TR>
<TD><CODE>compoundA</CODE></TD>
<TD><CODE>A -&gt; A</CODE></TD>
<TD><I>-/mer/mest norsk</I></TD>
</TR>
<TR>
<TD><CODE>mkAdv</CODE></TD> <TD><CODE>mkAdv</CODE></TD>
<TD><CODE>Str -&gt; Adv</CODE></TD> <TD><CODE>Str -&gt; Adv</CODE></TD>
<TD>-</TD> <TD>-</TD>
@@ -2218,22 +2196,27 @@ source <A HREF="../danish/ParadigmsDan.gf"><CODE>http://www.cs.chalmers.se/~aarn
</TR> </TR>
<TR> <TR>
<TD><CODE>mkV</CODE></TD> <TD><CODE>mkV</CODE></TD>
<TD><CODE>(spise,spiser,spises,spiste,spist,spis : Str) -&gt; V</CODE></TD>
<TD>-</TD>
</TR>
<TR>
<TD><CODE>regV</CODE></TD>
<TD><CODE>(snakke : Str) -&gt; V</CODE></TD> <TD><CODE>(snakke : Str) -&gt; V</CODE></TD>
<TD>-</TD> <TD>-</TD>
</TR> </TR>
<TR> <TR>
<TD><CODE>mk2V</CODE></TD> <TD><CODE>mkV</CODE></TD>
<TD><CODE>(leve,levde : Str) -&gt; V</CODE></TD> <TD><CODE>(leve,levde : Str) -&gt; V</CODE></TD>
<TD>-</TD> <TD>-</TD>
</TR> </TR>
<TR> <TR>
<TD><CODE>irregV</CODE></TD> <TD><CODE>mkV</CODE></TD>
<TD><CODE>(drikke, drak, drukket : Str) -&gt; V</CODE></TD> <TD><CODE>(drikke, drakk, drukket : Str) -&gt; V</CODE></TD>
<TD>-</TD>
</TR>
<TR>
<TD><CODE>mkV</CODE></TD>
<TD><CODE>(spise,spiser,spises,spiste,spist,spis : Str) -&gt; V</CODE></TD>
<TD>-</TD>
</TR>
<TR>
<TD><CODE>mkV</CODE></TD>
<TD><CODE>V -&gt; Str -&gt; V</CODE></TD>
<TD>-</TD> <TD>-</TD>
</TR> </TR>
<TR> <TR>
@@ -2242,11 +2225,6 @@ source <A HREF="../danish/ParadigmsDan.gf"><CODE>http://www.cs.chalmers.se/~aarn
<TD>-</TD> <TD>-</TD>
</TR> </TR>
<TR> <TR>
<TD><CODE>partV</CODE></TD>
<TD><CODE>V -&gt; Str -&gt; V</CODE></TD>
<TD>-</TD>
</TR>
<TR>
<TD><CODE>depV</CODE></TD> <TD><CODE>depV</CODE></TD>
<TD><CODE>V -&gt; V</CODE></TD> <TD><CODE>V -&gt; V</CODE></TD>
<TD>-</TD> <TD>-</TD>
@@ -2258,15 +2236,20 @@ source <A HREF="../danish/ParadigmsDan.gf"><CODE>http://www.cs.chalmers.se/~aarn
</TR> </TR>
<TR> <TR>
<TD><CODE>mkV2</CODE></TD> <TD><CODE>mkV2</CODE></TD>
<TD><CODE>V -&gt; Prep -&gt; V2</CODE></TD> <TD><CODE>Str -&gt; V2</CODE></TD>
<TD>-</TD> <TD>-</TD>
</TR> </TR>
<TR> <TR>
<TD><CODE>dirV2</CODE></TD> <TD><CODE>mkV2</CODE></TD>
<TD><CODE>V -&gt; V2</CODE></TD> <TD><CODE>V -&gt; V2</CODE></TD>
<TD>-</TD> <TD>-</TD>
</TR> </TR>
<TR> <TR>
<TD><CODE>mkV2</CODE></TD>
<TD><CODE>V -&gt; Prep -&gt; V2</CODE></TD>
<TD>-</TD>
</TR>
<TR>
<TD><CODE>mkV3</CODE></TD> <TD><CODE>mkV3</CODE></TD>
<TD><CODE>V -&gt; Prep -&gt; Prep -&gt; V3</CODE></TD> <TD><CODE>V -&gt; Prep -&gt; Prep -&gt; V3</CODE></TD>
<TD><I>snakke, med, om</I></TD> <TD><I>snakke, med, om</I></TD>
@@ -2348,6 +2331,7 @@ source <A HREF="../danish/ParadigmsDan.gf"><CODE>http://www.cs.chalmers.se/~aarn
</TR> </TR>
</TABLE> </TABLE>
<P></P>
<A NAME="toc5"></A> <A NAME="toc5"></A>
<H1>Paradigms for English</H1> <H1>Paradigms for English</H1>
<P> <P>
@@ -2631,6 +2615,7 @@ source <A HREF="../english/ParadigmsEng.gf"><CODE>http://www.cs.chalmers.se/~aar
</TR> </TR>
</TABLE> </TABLE>
<P></P>
<A NAME="toc6"></A> <A NAME="toc6"></A>
<H1>Paradigms for Finnish</H1> <H1>Paradigms for Finnish</H1>
<P> <P>
@@ -3044,6 +3029,7 @@ source <A HREF="../finnish/ParadigmsFin.gf"><CODE>http://www.cs.chalmers.se/~aar
</TR> </TR>
</TABLE> </TABLE>
<P></P>
<A NAME="toc7"></A> <A NAME="toc7"></A>
<H1>Paradigms for French</H1> <H1>Paradigms for French</H1>
<P> <P>
@@ -3327,6 +3313,7 @@ source <A HREF="../french/ParadigmsFre.gf"><CODE>http://www.cs.chalmers.se/~aarn
</TR> </TR>
</TABLE> </TABLE>
<P></P>
<A NAME="toc8"></A> <A NAME="toc8"></A>
<H1>Paradigms for German</H1> <H1>Paradigms for German</H1>
<P> <P>
@@ -3640,6 +3627,7 @@ source <A HREF="../german/ParadigmsGer.gf"><CODE>http://www.cs.chalmers.se/~aarn
</TR> </TR>
</TABLE> </TABLE>
<P></P>
<A NAME="toc9"></A> <A NAME="toc9"></A>
<H1>Paradigms for Italian</H1> <H1>Paradigms for Italian</H1>
<P> <P>
@@ -3928,6 +3916,7 @@ source <A HREF="../italian/ParadigmsIta.gf"><CODE>http://www.cs.chalmers.se/~aar
</TR> </TR>
</TABLE> </TABLE>
<P></P>
<A NAME="toc10"></A> <A NAME="toc10"></A>
<H1>Paradigms for Norwegian</H1> <H1>Paradigms for Norwegian</H1>
<P> <P>
@@ -4001,25 +3990,25 @@ source <A HREF="../norwegian/ParadigmsNor.gf"><CODE>http://www.cs.chalmers.se/~a
</TR> </TR>
<TR> <TR>
<TD><CODE>mkN</CODE></TD> <TD><CODE>mkN</CODE></TD>
<TD><CODE>(dreng,drengen,drenger,drengene : Str) -&gt; N</CODE></TD>
<TD>-</TD>
</TR>
<TR>
<TD><CODE>regN</CODE></TD>
<TD><CODE>Str -&gt; N</CODE></TD> <TD><CODE>Str -&gt; N</CODE></TD>
<TD>-</TD> <TD>-</TD>
</TR> </TR>
<TR> <TR>
<TD><CODE>regGenN</CODE></TD> <TD><CODE>mkN</CODE></TD>
<TD><CODE>Str -&gt; Gender -&gt; N</CODE></TD> <TD><CODE>Str -&gt; Gender -&gt; N</CODE></TD>
<TD>-</TD> <TD>-</TD>
</TR> </TR>
<TR> <TR>
<TD><CODE>mk2N</CODE></TD> <TD><CODE>mkN</CODE></TD>
<TD><CODE>(bil,bilen : Str) -&gt; N</CODE></TD> <TD><CODE>(bil,bilen : Str) -&gt; N</CODE></TD>
<TD>-</TD> <TD>-</TD>
</TR> </TR>
<TR> <TR>
<TD><CODE>mkN</CODE></TD>
<TD><CODE>(dreng,drengen,drenger,drengene : Str) -&gt; N</CODE></TD>
<TD>-</TD>
</TR>
<TR>
<TD><CODE>mkN2</CODE></TD> <TD><CODE>mkN2</CODE></TD>
<TD><CODE>N -&gt; Prep -&gt; N2</CODE></TD> <TD><CODE>N -&gt; Prep -&gt; N2</CODE></TD>
<TD>-</TD> <TD>-</TD>
@@ -4035,23 +4024,28 @@ source <A HREF="../norwegian/ParadigmsNor.gf"><CODE>http://www.cs.chalmers.se/~a
<TD>-</TD> <TD>-</TD>
</TR> </TR>
<TR> <TR>
<TD><CODE>regPN</CODE></TD> <TD><CODE>mkPN</CODE></TD>
<TD><CODE>Str -&gt; PN</CODE></TD> <TD><CODE>Str -&gt; PN</CODE></TD>
<TD><I>utrum</I></TD> <TD><I>masculine</I></TD>
</TR> </TR>
<TR> <TR>
<TD><CODE>regGenPN</CODE></TD> <TD><CODE>mkPN</CODE></TD>
<TD><CODE>Str -&gt; Gender -&gt; PN</CODE></TD> <TD><CODE>Str -&gt; Gender -&gt; PN</CODE></TD>
<TD>-</TD> <TD>-</TD>
</TR> </TR>
<TR> <TR>
<TD><CODE>nounPN</CODE></TD> <TD><CODE>mkPN</CODE></TD>
<TD><CODE>N -&gt; PN</CODE></TD> <TD><CODE>N -&gt; PN</CODE></TD>
<TD>-</TD> <TD>-</TD>
</TR> </TR>
<TR> <TR>
<TD><CODE>mkNP</CODE></TD> <TD><CODE>mkA</CODE></TD>
<TD><CODE>Str -&gt; Str -&gt; Number -&gt; Gender -&gt; NP</CODE></TD> <TD><CODE>(fin : Str) -&gt; A</CODE></TD>
<TD>-</TD>
</TR>
<TR>
<TD><CODE>mkA</CODE></TD>
<TD><CODE>(fin,fint : Str) -&gt; A</CODE></TD>
<TD>-</TD> <TD>-</TD>
</TR> </TR>
<TR> <TR>
@@ -4060,14 +4054,14 @@ source <A HREF="../norwegian/ParadigmsNor.gf"><CODE>http://www.cs.chalmers.se/~a
<TD>-</TD> <TD>-</TD>
</TR> </TR>
<TR> <TR>
<TD><CODE>regA</CODE></TD> <TD><CODE>mkA</CODE></TD>
<TD><CODE>Str -&gt; A</CODE></TD> <TD><CODE>(stor,stort,store,storre,storst : Str) -&gt; A</CODE></TD>
<TD>-</TD> <TD>-</TD>
</TR> </TR>
<TR> <TR>
<TD><CODE>mk2A</CODE></TD> <TD><CODE>mkA</CODE></TD>
<TD><CODE>(stor,stort : Str) -&gt; A</CODE></TD> <TD><CODE>A -&gt; A</CODE></TD>
<TD>-</TD> <TD><I>-/mer/mest norsk</I></TD>
</TR> </TR>
<TR> <TR>
<TD><CODE>mkA2</CODE></TD> <TD><CODE>mkA2</CODE></TD>
@@ -4075,36 +4069,6 @@ source <A HREF="../norwegian/ParadigmsNor.gf"><CODE>http://www.cs.chalmers.se/~a
<TD>-</TD> <TD>-</TD>
</TR> </TR>
<TR> <TR>
<TD><CODE>mkADeg</CODE></TD>
<TD><CODE>(stor,stort,store,storre,storst : Str) -&gt; A</CODE></TD>
<TD>-</TD>
</TR>
<TR>
<TD><CODE>regADeg</CODE></TD>
<TD><CODE>Str -&gt; A</CODE></TD>
<TD>-</TD>
</TR>
<TR>
<TD><CODE>irregADeg</CODE></TD>
<TD><CODE>(tung,tyngre,tyngst : Str) -&gt; A</CODE></TD>
<TD>-</TD>
</TR>
<TR>
<TD><CODE>mk3ADeg</CODE></TD>
<TD><CODE>(galen,galet,galne : Str) -&gt; A</CODE></TD>
<TD>-</TD>
</TR>
<TR>
<TD><CODE>mk2ADeg</CODE></TD>
<TD><CODE>(bred,bredt : Str) -&gt; A</CODE></TD>
<TD>-</TD>
</TR>
<TR>
<TD><CODE>compoundA</CODE></TD>
<TD><CODE>A -&gt; A</CODE></TD>
<TD><I>-/mer/mest norsk</I></TD>
</TR>
<TR>
<TD><CODE>mkAdv</CODE></TD> <TD><CODE>mkAdv</CODE></TD>
<TD><CODE>Str -&gt; Adv</CODE></TD> <TD><CODE>Str -&gt; Adv</CODE></TD>
<TD><I>e.g. her</I></TD> <TD><I>e.g. her</I></TD>
@@ -4121,35 +4085,35 @@ source <A HREF="../norwegian/ParadigmsNor.gf"><CODE>http://www.cs.chalmers.se/~a
</TR> </TR>
<TR> <TR>
<TD><CODE>mkV</CODE></TD> <TD><CODE>mkV</CODE></TD>
<TD><CODE>(spise,spiser,spises,spiste,spist,spis : Str) -&gt; V</CODE></TD>
<TD>-</TD>
</TR>
<TR>
<TD><CODE>regV</CODE></TD>
<TD><CODE>(snakke : Str) -&gt; V</CODE></TD> <TD><CODE>(snakke : Str) -&gt; V</CODE></TD>
<TD>-</TD> <TD>-</TD>
</TR> </TR>
<TR> <TR>
<TD><CODE>mk2V</CODE></TD> <TD><CODE>mkV</CODE></TD>
<TD><CODE>(leve,levde : Str) -&gt; V</CODE></TD> <TD><CODE>(leve,levde : Str) -&gt; V</CODE></TD>
<TD>-</TD> <TD>-</TD>
</TR> </TR>
<TR> <TR>
<TD><CODE>irregV</CODE></TD> <TD><CODE>mkV</CODE></TD>
<TD><CODE>(drikke, drakk, drukket : Str) -&gt; V</CODE></TD> <TD><CODE>(drikke, drakk, drukket : Str) -&gt; V</CODE></TD>
<TD>-</TD> <TD>-</TD>
</TR> </TR>
<TR> <TR>
<TD><CODE>mkV</CODE></TD>
<TD><CODE>(spise,spiser,spises,spiste,spist,spis : Str) -&gt; V</CODE></TD>
<TD>-</TD>
</TR>
<TR>
<TD><CODE>mkV</CODE></TD>
<TD><CODE>V -&gt; Str -&gt; V</CODE></TD>
<TD>-</TD>
</TR>
<TR>
<TD><CODE>vaereV</CODE></TD> <TD><CODE>vaereV</CODE></TD>
<TD><CODE>V -&gt; V</CODE></TD> <TD><CODE>V -&gt; V</CODE></TD>
<TD>-</TD> <TD>-</TD>
</TR> </TR>
<TR> <TR>
<TD><CODE>partV</CODE></TD>
<TD><CODE>V -&gt; Str -&gt; V</CODE></TD>
<TD>-</TD>
</TR>
<TR>
<TD><CODE>depV</CODE></TD> <TD><CODE>depV</CODE></TD>
<TD><CODE>V -&gt; V</CODE></TD> <TD><CODE>V -&gt; V</CODE></TD>
<TD>-</TD> <TD>-</TD>
@@ -4161,15 +4125,20 @@ source <A HREF="../norwegian/ParadigmsNor.gf"><CODE>http://www.cs.chalmers.se/~a
</TR> </TR>
<TR> <TR>
<TD><CODE>mkV2</CODE></TD> <TD><CODE>mkV2</CODE></TD>
<TD><CODE>V -&gt; Prep -&gt; V2</CODE></TD> <TD><CODE>Str -&gt; V2</CODE></TD>
<TD>-</TD> <TD>-</TD>
</TR> </TR>
<TR> <TR>
<TD><CODE>dirV2</CODE></TD> <TD><CODE>mkV2</CODE></TD>
<TD><CODE>V -&gt; V2</CODE></TD> <TD><CODE>V -&gt; V2</CODE></TD>
<TD>-</TD> <TD>-</TD>
</TR> </TR>
<TR> <TR>
<TD><CODE>mkV2</CODE></TD>
<TD><CODE>V -&gt; Prep -&gt; V2</CODE></TD>
<TD>-</TD>
</TR>
<TR>
<TD><CODE>mkV3</CODE></TD> <TD><CODE>mkV3</CODE></TD>
<TD><CODE>V -&gt; Prep -&gt; Prep -&gt; V3</CODE></TD> <TD><CODE>V -&gt; Prep -&gt; Prep -&gt; V3</CODE></TD>
<TD><I>snakke, med, om</I></TD> <TD><I>snakke, med, om</I></TD>
@@ -4251,6 +4220,7 @@ source <A HREF="../norwegian/ParadigmsNor.gf"><CODE>http://www.cs.chalmers.se/~a
</TR> </TR>
</TABLE> </TABLE>
<P></P>
<A NAME="toc11"></A> <A NAME="toc11"></A>
<H1>Paradigms for Russian</H1> <H1>Paradigms for Russian</H1>
<P> <P>
@@ -4334,12 +4304,17 @@ source <A HREF="../russian/ParadigmsRus.gf"><CODE>http://www.cs.chalmers.se/~aar
</TR> </TR>
<TR> <TR>
<TD><CODE>mkN</CODE></TD> <TD><CODE>mkN</CODE></TD>
<TD><CODE>(nomSg, genSg, datSg, accSg, instSg, preposSg,</CODE></TD> <TD><CODE>Str -&gt; N</CODE></TD>
<TD>-</TD> <TD>-</TD>
</TR> </TR>
<TR> <TR>
<TD><CODE>regN</CODE></TD> <TD><CODE>mkN</CODE></TD>
<TD><CODE>Str -&gt; N</CODE></TD> <TD><CODE>Str -&gt; Gender -&gt; Animacy -&gt; N</CODE></TD>
<TD>-</TD>
</TR>
<TR>
<TD><CODE>mkN</CODE></TD>
<TD><CODE>(nomSg,_,_,_,_,_,_,_,_,_,_,prepPl : Str) -&gt; Gender -&gt; Animacy -&gt; N</CODE></TD>
<TD>-</TD> <TD>-</TD>
</TR> </TR>
<TR> <TR>
@@ -4454,35 +4429,30 @@ source <A HREF="../russian/ParadigmsRus.gf"><CODE>http://www.cs.chalmers.se/~aar
</TR> </TR>
<TR> <TR>
<TD><CODE>mkPN</CODE></TD> <TD><CODE>mkPN</CODE></TD>
<TD><CODE>Str -&gt; PN</CODE></TD>
<TD>-</TD>
</TR>
<TR>
<TD><CODE>mkPN</CODE></TD>
<TD><CODE>Str -&gt; Gender -&gt; Animacy -&gt; PN</CODE></TD> <TD><CODE>Str -&gt; Gender -&gt; Animacy -&gt; PN</CODE></TD>
<TD><I>"Иван", "Маша"</I></TD> <TD><I>"Иван", "Маша"</I></TD>
</TR> </TR>
<TR> <TR>
<TD><CODE>nounPN</CODE></TD> <TD><CODE>mkPN</CODE></TD>
<TD><CODE>N -&gt; PN</CODE></TD> <TD><CODE>N -&gt; PN</CODE></TD>
<TD>-</TD> <TD>-</TD>
</TR> </TR>
<TR> <TR>
<TD><CODE>mkCN</CODE></TD> <TD><CODE>mkA</CODE></TD>
<TD><CODE>N -&gt; CN</CODE></TD>
<TD>-</TD>
</TR>
<TR>
<TD><CODE>mkNP</CODE></TD>
<TD><CODE>Str -&gt; Gender -&gt; Animacy -&gt; NP</CODE></TD>
<TD>-</TD>
</TR>
<TR>
<TD><CODE>regA</CODE></TD>
<TD><CODE>Str -&gt; Str -&gt; A</CODE></TD>
<TD>-</TD>
</TR>
<TR>
<TD><CODE>adjInvar</CODE></TD>
<TD><CODE>Str -&gt; A</CODE></TD> <TD><CODE>Str -&gt; A</CODE></TD>
<TD><I>khaki, mini, hindi, netto</I></TD> <TD><I>khaki, mini, hindi, netto</I></TD>
</TR> </TR>
<TR> <TR>
<TD><CODE>mkA</CODE></TD>
<TD><CODE>Str -&gt; Str -&gt; A</CODE></TD>
<TD>-</TD>
</TR>
<TR>
<TD><CODE>AStaruyj</CODE></TD> <TD><CODE>AStaruyj</CODE></TD>
<TD><CODE>Str -&gt; Str -&gt; A</CODE></TD> <TD><CODE>Str -&gt; Str -&gt; A</CODE></TD>
<TD><I>ending with "-ый"</I></TD> <TD><I>ending with "-ый"</I></TD>
@@ -4519,36 +4489,37 @@ source <A HREF="../russian/ParadigmsRus.gf"><CODE>http://www.cs.chalmers.se/~aar
</TR> </TR>
<TR> <TR>
<TD><CODE>mkV</CODE></TD> <TD><CODE>mkV</CODE></TD>
<TD><CODE>Aspect -&gt; (presentSgP1,presentSgP2,presentSgP3,</CODE></TD> <TD><CODE>Aspect -&gt; Conjugation -&gt; (stemPrsSgP1,endPrsSgP1,pastSgP1,imp,inf : Str) -&gt; V</CODE></TD>
<TD>-</TD> <TD>-</TD>
</TR> </TR>
<TR> <TR>
<TD><CODE>pastSgP1,imperative,infinitive</CODE></TD> <TD><CODE>mkV</CODE></TD>
<TD><CODE>Str) -&gt; V</CODE></TD> <TD><CODE>Aspect -&gt; (presSgP1,presSgP2,presSgP3,presPlP1,presPlP2,presPlP3,pastSgMasc,imp,inf: Str) -&gt; V</CODE></TD>
<TD>-</TD> <TD>-</TD>
</TR> </TR>
<TR> <TR>
<TD><CODE>mkV2</CODE></TD> <TD><CODE>mkV2</CODE></TD>
<TD><CODE>V -&gt; V2</CODE></TD>
<TD><I>"видеть", "любить"</I></TD>
</TR>
<TR>
<TD><CODE>mkV2</CODE></TD>
<TD><CODE>V -&gt; Str -&gt; Case -&gt; V2</CODE></TD> <TD><CODE>V -&gt; Str -&gt; Case -&gt; V2</CODE></TD>
<TD><I>"войти в дом"; "в", accusative</I></TD> <TD><I>"войти в дом"; "в", accusative</I></TD>
</TR> </TR>
<TR> <TR>
<TD><CODE>mkV3</CODE></TD>
<TD><CODE>V -&gt; Str -&gt; Str -&gt; Case -&gt; Case -&gt; V3</CODE></TD>
<TD><I><>ложиÑÑŒ пиÑ<C2B8>ьмо в конверт"</I></TD>
</TR>
<TR>
<TD><CODE>dirV2</CODE></TD>
<TD><CODE>V -&gt; V2</CODE></TD>
<TD><I>"видеть", "любить"</I></TD>
</TR>
<TR>
<TD><CODE>tvDirDir</CODE></TD> <TD><CODE>tvDirDir</CODE></TD>
<TD><CODE>V -&gt; V3</CODE></TD> <TD><CODE>V -&gt; V3</CODE></TD>
<TD>-</TD> <TD>-</TD>
</TR> </TR>
<TR>
<TD><CODE>mkV3</CODE></TD>
<TD><CODE>V -&gt; Str -&gt; Str -&gt; Case -&gt; Case -&gt; V3</CODE></TD>
<TD><I><>ложиÑÑŒ пиÑ<C2B8>ьмо в конверт"</I></TD>
</TR>
</TABLE> </TABLE>
<P></P>
<A NAME="toc12"></A> <A NAME="toc12"></A>
<H1>Paradigms for Spanish</H1> <H1>Paradigms for Spanish</H1>
<P> <P>
@@ -4842,6 +4813,7 @@ source <A HREF="../spanish/ParadigmsSpa.gf"><CODE>http://www.cs.chalmers.se/~aar
</TR> </TR>
</TABLE> </TABLE>
<P></P>
<A NAME="toc13"></A> <A NAME="toc13"></A>
<H1>Paradigms for Swedish</H1> <H1>Paradigms for Swedish</H1>
<P> <P>
@@ -5140,6 +5112,7 @@ source <A HREF="../swedish/ParadigmsSwe.gf"><CODE>http://www.cs.chalmers.se/~aar
</TR> </TR>
</TABLE> </TABLE>
<P></P>
<A NAME="toc14"></A> <A NAME="toc14"></A>
<H1>Browsing the libraries with GF commands</H1> <H1>Browsing the libraries with GF commands</H1>
<P> <P>
@@ -5235,6 +5208,6 @@ For each language, an instantiation of the functor:
</PRE> </PRE>
<P></P> <P></P>
<!-- html code generated by txt2tags 2.4 (http://txt2tags.sf.net) --> <!-- html code generated by txt2tags 2.3 (http://txt2tags.sf.net) -->
<!-- cmdline: txt2tags -thtml -\-toc synopsis.txt --> <!-- cmdline: txt2tags -thtml -\-toc synopsis.txt -->
</BODY></HTML> </BODY></HTML>

View File

@@ -484,8 +484,8 @@ reg3N = \vesi,veden,vesi
compN = \s,n -> {s = \\c => s ++ n.s ! c ; g = n.g ; lock_N = <>} ; compN = \s,n -> {s = \\c => s ++ n.s ! c ; g = n.g ; lock_N = <>} ;
mkNP : N -> Number -> CatFin.NP ; makeNP : N -> Number -> CatFin.NP ;
mkNP noun num = { makeNP noun num = {
s = \\c => noun.s ! NCase num (npform2case num c) ; s = \\c => noun.s ! NCase num (npform2case num c) ;
a = agrP3 num ; a = agrP3 num ;
isPron = False ; isPron = False ;

View File

@@ -32,9 +32,9 @@ concrete StructuralFin of Structural = CatFin **
can_VV = reg2V "voida" "voi" ; can_VV = reg2V "voida" "voi" ;
during_Prep = postGenPrep "aikana" ; during_Prep = postGenPrep "aikana" ;
either7or_DConj = sd2 "joko" "tai" ** {n = Sg} ; either7or_DConj = sd2 "joko" "tai" ** {n = Sg} ;
everybody_NP = mkNP (regN "jokainen") Sg ; everybody_NP = makeNP (regN "jokainen") Sg ;
every_Det = mkDet Sg (regN "jokainen") ; every_Det = mkDet Sg (regN "jokainen") ;
everything_NP = mkNP ((nhn (sKorpi "kaikki" "kaiken" "kaikkena")) ** everything_NP = makeNP ((nhn (sKorpi "kaikki" "kaiken" "kaikkena")) **
{lock_N = <>}) Sg ; {lock_N = <>}) Sg ;
everywhere_Adv = ss "kaikkialla" ; everywhere_Adv = ss "kaikkialla" ;
few_Det = mkDet Sg (regN "harva") ; few_Det = mkDet Sg (regN "harva") ;

View File

@@ -22,12 +22,12 @@ concrete ExtraFre of ExtraFreAbs = ExtraRomanceFre **
i8fem_Pron = mkPronoun i8fem_Pron = mkPronoun
(elision "j") (elision "m") (elision "m") "moi" "mon" (elisPoss "m") "mes" (elision "j") (elision "m") (elision "m") "moi" "mon" (elisPoss "m") "mes"
Fem Sg P1 ; Fem Sg P1 ;
these8fem_NP = mkNP ["celles-ci"] Fem Pl ; these8fem_NP = makeNP ["celles-ci"] Fem Pl ;
they8fem_Pron = mkPronoun they8fem_Pron = mkPronoun
"elles" "les" "leur" "eux" "leur" "leur" "leurs" "elles" "les" "leur" "eux" "leur" "leur" "leurs"
Fem Pl P3 ; Fem Pl P3 ;
this8fem_NP = pn2np (mkPN ["celle-ci"] Fem) ; this8fem_NP = pn2np (mkPN ["celle-ci"] Fem) ;
those8fem_NP = mkNP ["celles-là"] Fem Pl ; those8fem_NP = makeNP ["celles-là"] Fem Pl ;
we8fem_Pron = mkPronoun "nous" "nous" "nous" "nous" "notre" "notre" "nos" we8fem_Pron = mkPronoun "nous" "nous" "nous" "nous" "notre" "notre" "nos"
Fem Pl P1 ; Fem Pl P1 ;
whoPl8fem_IP = whoPl8fem_IP =

View File

@@ -405,8 +405,8 @@ oper
--------------------------- obsolete --------------------------- obsolete
mkNP : Str -> Gender -> Number -> NP ; makeNP : Str -> Gender -> Number -> NP ;
mkNP x g n = {s = (pn2np {s=x;g= g}).s; a = agrP3 g n ; hasClit = False} ** {lock_NP = <>} ; makeNP x g n = {s = (pn2np {s=x;g= g}).s; a = agrP3 g n ; hasClit = False} ** {lock_NP = <>} ;
regPN : Str -> PN ; regPN : Str -> PN ;
mk2PN : Str -> Gender -> PN = \x,g -> {s = x ; g = g} ** {lock_PN = <>} ; mk2PN : Str -> Gender -> PN = \x,g -> {s = x ; g = g} ** {lock_PN = <>} ;

View File

@@ -90,12 +90,12 @@ lin
Pl => \\_,_ => "ces" Pl => \\_,_ => "ces"
} }
} ; } ;
that_NP = mkNP ["cela"] Masc Sg ; that_NP = makeNP ["cela"] Masc Sg ;
there7from_Adv = ss ["de là"] ; there7from_Adv = ss ["de là"] ;
there7to_Adv = ss "là" ; --- y there7to_Adv = ss "là" ; --- y
there_Adv = ss "là" ; there_Adv = ss "là" ;
therefore_PConj = ss "donc" ; therefore_PConj = ss "donc" ;
these_NP = mkNP ["ceux-ci"] Masc Pl ; these_NP = makeNP ["ceux-ci"] Masc Pl ;
they_Pron = mkPronoun they_Pron = mkPronoun
"ils" "les" "leur" "eux" "leur" "leur" "leurs" "ils" "les" "leur" "eux" "leur" "leur" "leurs"
Masc Pl P3 ; Masc Pl P3 ;
@@ -108,7 +108,7 @@ lin
} }
} ; } ;
this_NP = pn2np (mkPN ["ceci"] Masc) ; this_NP = pn2np (mkPN ["ceci"] Masc) ;
those_NP = mkNP ["ceux-là"] Masc Pl ; those_NP = makeNP ["ceux-là"] Masc Pl ;
through_Prep = mkPreposition "par" ; through_Prep = mkPreposition "par" ;
too_AdA = ss "trop" ; too_AdA = ss "trop" ;
to_Prep = complDat ; to_Prep = complDat ;

View File

@@ -5,12 +5,12 @@ concrete ExtraIta of ExtraItaAbs = ExtraRomanceIta **
i8fem_Pron = mkPronoun i8fem_Pron = mkPronoun
"io" "mi" "mi" "me" "me" "mio" "mia" "miei" "mie" "io" "mi" "mi" "me" "me" "mio" "mia" "miei" "mie"
Fem Sg P1 ; Fem Sg P1 ;
these8fem_NP = mkNP ["queste"] Fem Pl ; these8fem_NP = makeNP ["queste"] Fem Pl ;
they8fem_Pron = mkPronoun they8fem_Pron = mkPronoun
"loro" "loro" "li" "glie" "loro" "loro" "loro" "loro" "loro" "loro" "loro" "li" "glie" "loro" "loro" "loro" "loro" "loro"
Fem Pl P3 ; Fem Pl P3 ;
this8fem_NP = pn2np (mkPN ["questa"] Fem) ; this8fem_NP = pn2np (mkPN ["questa"] Fem) ;
those8fem_NP = mkNP ["quelle"] Fem Pl ; those8fem_NP = makeNP ["quelle"] Fem Pl ;
we8fem_Pron = we8fem_Pron =
mkPronoun "noi" "ci" "ci" "ce" "noi" "nostro" "nostra" "nostri" "nostre" mkPronoun "noi" "ci" "ci" "ce" "noi" "nostro" "nostra" "nostri" "nostre"
Fem Pl P1 ; Fem Pl P1 ;

View File

@@ -323,7 +323,7 @@ oper
} }
} ; } ;
mkNP x g n = {s = (pn2np (mk2PN x g)).s; a = agrP3 g n ; hasClit = False} ** {lock_NP = <>} ; makeNP x g n = {s = (pn2np (mk2PN x g)).s; a = agrP3 g n ; hasClit = False} ** {lock_NP = <>} ;
mk5A a b c d e = mk5A a b c d e =
compADeg {s = \\_ => (mkAdj a b c d e).s ; isPre = False ; lock_A = <>} ; compADeg {s = \\_ => (mkAdj a b c d e).s ; isPre = False ; lock_A = <>} ;
@@ -434,7 +434,7 @@ oper
regPN : Str -> PN ; -- feminine if "-a", otherwise masculine regPN : Str -> PN ; -- feminine if "-a", otherwise masculine
-- obsolete -- obsolete
mkNP : Str -> Gender -> Number -> NP ; makeNP : Str -> Gender -> Number -> NP ;
mkPN = overload { mkPN = overload {
mkPN : Str -> PN = regPN ; mkPN : Str -> PN = regPN ;

View File

@@ -27,7 +27,7 @@ lin
can_VV = mkVV (verboV (potere_69 "potere")) ; can_VV = mkVV (verboV (potere_69 "potere")) ;
during_Prep = mkPrep "durante" ; during_Prep = mkPrep "durante" ;
either7or_DConj = {s1,s2 = "o" ; n = Sg} ; either7or_DConj = {s1,s2 = "o" ; n = Sg} ;
everybody_NP = mkNP ["tutti"] Masc Pl ; everybody_NP = makeNP ["tutti"] Masc Pl ;
every_Det = {s = \\_,_ => "ogni" ; n = Sg} ; every_Det = {s = \\_,_ => "ogni" ; n = Sg} ;
everything_NP = pn2np (mkPN ["tutto"] Masc) ; everything_NP = pn2np (mkPN ["tutto"] Masc) ;
everywhere_Adv = ss "dappertutto" ; everywhere_Adv = ss "dappertutto" ;
@@ -87,12 +87,12 @@ lin
Pl => \\g,c => prepCase c ++ genForms "quelli" "quelle" ! g ---- quegli Pl => \\g,c => prepCase c ++ genForms "quelli" "quelle" ! g ---- quegli
} }
} ; } ;
that_NP = mkNP ["quello"] Masc Sg ; that_NP = makeNP ["quello"] Masc Sg ;
there7from_Adv = ss ["di là"] ; there7from_Adv = ss ["di là"] ;
there7to_Adv = ss "là" ; --- ci there7to_Adv = ss "là" ; --- ci
there_Adv = ss "là" ; there_Adv = ss "là" ;
therefore_PConj = ss "quindi" ; therefore_PConj = ss "quindi" ;
these_NP = mkNP ["questi"] Masc Pl ; these_NP = makeNP ["questi"] Masc Pl ;
they_Pron = mkPronoun they_Pron = mkPronoun
"loro" "loro" "li" "glie" "loro" "loro" "loro" "loro" "loro" "loro" "loro" "li" "glie" "loro" "loro" "loro" "loro" "loro"
Masc Pl P3 ; Masc Pl P3 ;
@@ -103,7 +103,7 @@ lin
} }
} ; } ;
this_NP = pn2np (mkPN ["questo"] Masc) ; this_NP = pn2np (mkPN ["questo"] Masc) ;
those_NP = mkNP ["quelli"] Masc Pl ; those_NP = makeNP ["quelli"] Masc Pl ;
through_Prep = mkPrep "per" ; through_Prep = mkPrep "per" ;
too_AdA = ss "troppo" ; too_AdA = ss "troppo" ;
to_Prep = complDat ; to_Prep = complDat ;

View File

@@ -66,27 +66,24 @@ oper
--2 Nouns --2 Nouns
-- Worst case: give all four forms. The gender is computed from the
-- last letter of the second form (if "n", then $utrum$, otherwise $neutrum$).
mkN : (dreng,drengen,drenger,drengene : Str) -> N ;
-- The regular function takes the singular indefinite form -- The regular function takes the singular indefinite form
-- and computes the other forms and the gender by a heuristic. -- and computes the other forms and the gender by a heuristic.
-- The heuristic is that nouns ending "e" are feminine like "kvinne", -- The heuristic is that nouns ending "e" are feminine like "kvinne",
-- all others are masculine like "bil". -- all others are masculine like "bil".
-- If in doubt, use the $cc$ command to test!
regN : Str -> N ;
-- Giving gender manually makes the heuristic more reliable. -- Giving gender manually makes the heuristic more reliable.
-- One can also compute the gender from the definite form.
regGenN : Str -> Gender -> N ;
-- This function takes the singular indefinite and definite forms; the
-- gender is computed from the definite form. -- gender is computed from the definite form.
-- If in doubt, use the $cc$ command to test!
-- In the worst case, give all four forms. The gender is computed from the
-- last letter of the second form (if "n", then $utrum$, otherwise $neutrum$).
mkN : overload {
mkN : Str -> N ;
mkN : Str -> Gender -> N ;
mkN : (bil,bilen : Str) -> N ;
mkN : (dreng,drengen,drenger,drengene : Str) -> N
} ;
mk2N : (bil,bilen : Str) -> N ;
--3 Compound nouns --3 Compound nouns
@@ -126,61 +123,39 @@ oper
--3 Proper names and noun phrases --3 Proper names and noun phrases
-- --
-- Proper names, with a regular genitive, are formed as follows -- Proper names, with a regular genitive, are formed as follows
regPN : Str -> PN ; -- utrum
regGenPN : Str -> Gender -> PN ;
-- Sometimes you can reuse a common noun as a proper name, e.g. "Bank". -- Sometimes you can reuse a common noun as a proper name, e.g. "Bank".
nounPN : N -> PN ; mkPN : overload {
mkPN : Str -> PN ; -- masculine
mkPN : Str -> Gender -> PN ;
mkPN : N -> PN ;
} ;
-- To form a noun phrase that can also be plural and have an irregular
-- genitive, you can use the worst-case function.
mkNP : Str -> Str -> Number -> Gender -> NP ;
--2 Adjectives --2 Adjectives
-- Non-comparison one-place adjectives need three forms: -- The regular pattern works for many adjectives, e.g. those ending
-- with "ig". Two, five, or at worst five forms are sometimes needed.
mkA : (galen,galet,galne : Str) -> A ; mkA : overload {
mkA : (fin : Str) -> A ;
mkA : (fin,fint : Str) -> A ;
mkA : (galen,galet,galne : Str) -> A ;
mkA : (stor,stort,store,storre,storst : Str) -> A ;
-- For regular adjectives, the other forms are derived. -- If comparison is formed by "mer", "mest", as in general for
-- long adjective, the following pattern is used:
regA : Str -> A ; mkA : A -> A ; -- -/mer/mest norsk
} ;
-- In most cases, two forms are enough.
mk2A : (stor,stort : Str) -> A ;
--3 Two-place adjectives --3 Two-place adjectives
-- --
-- Two-place adjectives need a preposition for their second argument. -- Two-place adjectives need a preposition for their second argument.
mkA2 : A -> Prep -> A2 ; mkA2 : A -> Prep -> A2 ;
-- Comparison adjectives may need as many as five forms.
mkADeg : (stor,stort,store,storre,storst : Str) -> A ;
-- The regular pattern works for many adjectives, e.g. those ending
-- with "ig".
regADeg : Str -> A ;
-- Just the comparison forms can be irregular.
irregADeg : (tung,tyngre,tyngst : Str) -> A ;
-- Sometimes just the positive forms are irregular.
mk3ADeg : (galen,galet,galne : Str) -> A ;
mk2ADeg : (bred,bredt : Str) -> A ;
-- If comparison is formed by "mer", "mest", as in general for
-- long adjective, the following pattern is used:
compoundA : A -> A ; -- -/mer/mest norsk
--2 Adverbs --2 Adverbs
@@ -198,22 +173,33 @@ oper
--2 Verbs --2 Verbs
-- --
-- The worst case needs six forms.
mkV : (spise,spiser,spises,spiste,spist,spis : Str) -> V ; mkV : overload {
-- The 'regular verb' function is the first conjugation. -- The 'regular verb' function is the first conjugation.
regV : (snakke : Str) -> V ; mkV : (snakke : Str) -> V ;
-- The almost regular verb function needs the infinitive and the preteritum. -- The almost regular verb function needs the infinitive and the preteritum.
mk2V : (leve,levde : Str) -> V ; mkV : (leve,levde : Str) -> V ;
-- There is an extensive list of irregular verbs in the module $IrregNor$. -- There is an extensive list of irregular verbs in the module $IrregNor$.
-- In practice, it is enough to give three forms, as in school books. -- In practice, it is enough to give three forms, as in school books.
irregV : (drikke, drakk, drukket : Str) -> V ; mkV : (drikke, drakk, drukket : Str) -> V ;
-- The worst case needs six forms.
mkV : (spise,spiser,spises,spiste,spist,spis : Str) -> V ;
--3 Verbs with a particle.
--
-- The particle, such as in "lukke opp", is given as a string.
mkV : V -> Str -> V ;
} ;
--3 Verbs with 'være' as auxiliary --3 Verbs with 'være' as auxiliary
@@ -223,11 +209,6 @@ oper
vaereV : V -> V ; vaereV : V -> V ;
--3 Verbs with a particle.
--
-- The particle, such as in "lukke opp", is given as a string.
partV : V -> Str -> V ;
--3 Deponent verbs. --3 Deponent verbs.
-- --
@@ -240,11 +221,14 @@ oper
--3 Two-place verbs --3 Two-place verbs
-- --
-- Two-place verbs need a preposition, except the special case with direct object. -- Two-place verbs need a preposition, except the special case with direct object.
-- (transitive verbs). Notice that a particle comes from the $V$. -- (transitive verbs). Notice that, if a particle is needed, it comes from the $V$.
mkV2 : V -> Prep -> V2 ; mkV2 : overload {
mkV2 : Str -> V2 ;
mkV2 : V -> V2 ;
mkV2 : V -> Prep -> V2 ;
} ;
dirV2 : V -> V2 ;
--3 Three-place verbs --3 Three-place verbs
-- --
@@ -301,7 +285,7 @@ oper
nominative = Nom ; nominative = Nom ;
genitive = Gen ; genitive = Gen ;
mkN x y z u = mkSubstantive x y z u ** {g = extNGen y ; lock_N = <>} ; mk4N x y z u = mkSubstantive x y z u ** {g = extNGen y ; lock_N = <>} ;
regN x = regGenN x g where { regN x = regGenN x g where {
g = case <x : Str> of { g = case <x : Str> of {
@@ -312,14 +296,14 @@ oper
regGenN x g = case last x of { regGenN x g = case last x of {
"e" => case g of { "e" => case g of {
Utr Masc => mkN x (x + "n") (x + "r") (x + "ne") ; Utr Masc => mk4N x (x + "n") (x + "r") (x + "ne") ;
Utr Fem => mkN x (init x + "a") (x + "r") (x + "ne") ; Utr Fem => mk4N x (init x + "a") (x + "r") (x + "ne") ;
Neutr => mkN x (x + "t") (x + "r") (init x + "a") Neutr => mk4N x (x + "t") (x + "r") (init x + "a")
} ; } ;
_ => case g of { _ => case g of {
Utr Masc => mkN x (x + "en") (x + "er") (x + "ene") ; Utr Masc => mk4N x (x + "en") (x + "er") (x + "ene") ;
Utr Fem => mkN x (x + "a") (x + "er") (x + "ene") ; Utr Fem => mk4N x (x + "a") (x + "er") (x + "ene") ;
Neutr => mkN x (x + "et") (x + "") (x + "a") Neutr => mk4N x (x + "et") (x + "") (x + "a")
} }
} ; } ;
@@ -337,12 +321,17 @@ oper
regGenPN n g = {s = \\c => mkCase c n ; g = g} ** {lock_PN = <>} ; regGenPN n g = {s = \\c => mkCase c n ; g = g} ** {lock_PN = <>} ;
regPN n = regGenPN n utrum ; regPN n = regGenPN n utrum ;
nounPN n = {s = n.s ! singular ! Indef ; g = n.g ; lock_PN = <>} ; nounPN n = {s = n.s ! singular ! Indef ; g = n.g ; lock_PN = <>} ;
mkNP x y n g =
-- To form a noun phrase that can also be plural and have an irregular
-- genitive, you can use the worst-case function.
makeNP : Str -> Str -> Number -> Gender -> NP ;
makeNP x y n g =
{s = table {NPPoss _ => x ; _ => y} ; a = agrP3 g n ; {s = table {NPPoss _ => x ; _ => y} ; a = agrP3 g n ;
lock_NP = <>} ; lock_NP = <>} ;
mkA a b c = (mkAdject a b c [] []) ** {isComp = False ; lock_A = <>} ; mk3A a b c = (mkAdject a b c [] []) ** {isComp = False ; lock_A = <>} ;
mk2A a b = mkA a b (a + "e") ; mk2A a b = mk3A a b (a + "e") ;
regA a = (regADeg a) ** {isComp = False ; lock_A = <>} ; regA a = (regADeg a) ** {isComp = False ; lock_A = <>} ;
mkA2 a p = a ** {c2 = p.s ; lock_A2 = <>} ; mkA2 a p = a ** {c2 = p.s ; lock_A2 = <>} ;
@@ -369,10 +358,22 @@ oper
mkPrep p = {s = p ; lock_Prep = <>} ; mkPrep p = {s = p ; lock_Prep = <>} ;
noPrep = mkPrep [] ; noPrep = mkPrep [] ;
mkV a b c d e f = mkVerb6 a b c d e f ** mk6V a b c d e f = mkVerb6 a b c d e f **
{part = [] ; vtype = VAct ; isVaere = False ; lock_V = <>} ; {part = [] ; vtype = VAct ; isVaere = False ; lock_V = <>} ;
regV a = case last a of { regV a = case last a of {
--3 Verbs with a particle.
--
-- The particle, such as in "lukke opp", is given as a string.
--3 Verbs with a particle.
--
-- The particle, such as in "lukke opp", is given as a string.
"e" => vHusk (init a) ; "e" => vHusk (init a) ;
_ => vBo a _ => vBo a
} ** {part = [] ; vtype = VAct ; isVaere = False ; lock_V = <>} ; } ** {part = [] ; vtype = VAct ; isVaere = False ; lock_V = <>} ;
@@ -391,7 +392,7 @@ oper
_ => drikke + "r" _ => drikke + "r"
} }
in in
mkV drikke drikker (drikke + "s") drakk drukket drikk ; mk6V drikke drikker (drikke + "s") drakk drukket drikk ;
vaereV v = { vaereV v = {
s = v.s ; s = v.s ;
@@ -405,8 +406,8 @@ oper
depV v = {s = v.s ; part = v.part ; vtype = VPass ; isVaere = False ; lock_V = <>} ; depV v = {s = v.s ; part = v.part ; vtype = VPass ; isVaere = False ; lock_V = <>} ;
reflV v = {s = v.s ; part = v.part ; vtype = VRefl ; isVaere = False ; lock_V = <>} ; reflV v = {s = v.s ; part = v.part ; vtype = VRefl ; isVaere = False ; lock_V = <>} ;
mkV2 v p = v ** {c2 = p.s ; lock_V2 = <>} ; mk2V2 v p = v ** {c2 = p.s ; lock_V2 = <>} ;
dirV2 v = mkV2 v noPrep ; dirV2 v = mk2V2 v noPrep ;
mkV3 v p q = v ** {c2 = p.s ; c3 = q.s ; lock_V3 = <>} ; mkV3 v p q = v ** {c2 = p.s ; c3 = q.s ; lock_V3 = <>} ;
dirV3 v p = mkV3 v noPrep p ; dirV3 v p = mkV3 v noPrep p ;
@@ -414,13 +415,13 @@ oper
mkV0 v = v ** {lock_V0 = <>} ; mkV0 v = v ** {lock_V0 = <>} ;
mkVS v = v ** {lock_VS = <>} ; mkVS v = v ** {lock_VS = <>} ;
mkV2S v p = mkV2 v p ** {lock_V2S = <>} ; mkV2S v p = mk2V2 v p ** {lock_V2S = <>} ;
mkVV v = v ** {c2 = "å" ; lock_VV = <>} ; mkVV v = v ** {c2 = "å" ; lock_VV = <>} ;
mkV2V v p t = mkV2 v p ** {s3 = t ; lock_V2V = <>} ; mkV2V v p t = mk2V2 v p ** {s3 = t ; lock_V2V = <>} ;
mkVA v = v ** {lock_VA = <>} ; mkVA v = v ** {lock_VA = <>} ;
mkV2A v p = mkV2 v p ** {lock_V2A = <>} ; mkV2A v p = mk2V2 v p ** {lock_V2A = <>} ;
mkVQ v = v ** {lock_VQ = <>} ; mkVQ v = v ** {lock_VQ = <>} ;
mkV2Q v p = mkV2 v p ** {lock_V2Q = <>} ; mkV2Q v p = mk2V2 v p ** {lock_V2Q = <>} ;
mkAS v = v ** {lock_A = <>} ; mkAS v = v ** {lock_A = <>} ;
mkA2S v p = mkA2 v p ** {lock_A = <>} ; mkA2S v p = mkA2 v p ** {lock_A = <>} ;
@@ -433,4 +434,72 @@ oper
A2V : Type = A2 ; A2V : Type = A2 ;
---------
mk2N : (bil,bilen : Str) -> N ;
mk4N : (dreng,drengen,drenger,drengene : Str) -> N ;
regN : Str -> N ;
regGenN : Str -> Gender -> N ;
mk2N : (bil,bilen : Str) -> N ;
mkN = overload {
mkN : Str -> N = regN ;
mkN : Str -> Gender -> N = regGenN ;
mkN : (bil,bilen : Str) -> N = mk2N ;
mkN : (dreng,drengen,drenger,drengene : Str) -> N = mk4N
} ;
mkPN = overload {
mkPN : Str -> PN = regPN ; -- masculine
mkPN : Str -> Gender -> PN = regGenPN ;
mkPN : N -> PN = nounPN ;
} ;
regPN : Str -> PN ; -- utrum
regGenPN : Str -> Gender -> PN ;
nounPN : N -> PN ;
mkA = overload {
mkA : (fin : Str) -> A = regADeg ;
mkA : (fin,fint : Str) -> A = mk2ADeg ;
mkA : (galen,galet,galne : Str) -> A = mk3ADeg ;
mkA : (stor,stort,store,storre,storst : Str) -> A = mkADeg ;
mkA : A -> A = compoundA ; -- -/mer/mest norsk
} ;
mk3A : (galen,galet,galne : Str) -> A ;
regA : Str -> A ;
mk2A : (stor,stort : Str) -> A ;
mkADeg : (stor,stort,store,storre,storst : Str) -> A ;
regADeg : Str -> A ;
irregADeg : (tung,tyngre,tyngst : Str) -> A ;
mk3ADeg : (galen,galet,galne : Str) -> A ;
mk2ADeg : (bred,bredt : Str) -> A ;
compoundA : A -> A ; -- -/mer/mest norsk
mkV = overload {
mkV : (snakke : Str) -> V = regV ;
mkV : (leve,levde : Str) -> V = mk2V ;
mkV : (drikke, drakk, drukket : Str) -> V = irregV ;
mkV : (spise,spiser,spises,spiste,spist,spis : Str) -> V = mk6V ;
mkV : V -> Str -> V = partV ;
} ;
regV : (snakke : Str) -> V ;
mk2V : (leve,levde : Str) -> V ;
irregV : (drikke, drakk, drukket : Str) -> V ;
mk6V : (spise,spiser,spises,spiste,spist,spis : Str) -> V ;
partV : V -> Str -> V ;
mkV2 = overload {
mkV2 : Str -> V2 = \s -> dirV2 (regV s) ;
mkV2 : V -> V2 = dirV2 ;
mkV2 : V -> Prep -> V2 = mk2V2 ;
} ;
mk2V2 : V -> Prep -> V2 ;
dirV2 : V -> V2 ;
} ; } ;

View File

@@ -63,15 +63,27 @@ oper
singular : Number ; singular : Number ;
plural : Number ; plural : Number ;
--2 Nouns
-- Best case: indeclinabe nouns: "кофе", "пальто", "ВУЗ".
Animacy: Type ; Animacy: Type ;
animate: Animacy; animate: Animacy;
inanimate: Animacy; inanimate: Animacy;
--2 Nouns
-- Best case: indeclinabe nouns: "кофе", "пальто", "ВУЗ".
mkN : overload {
-- The regular function captures the variants for some popular nouns
-- endings below:
mkN : Str -> N ;
-- This function is for indeclinable nouns.
mkIndeclinableNoun: Str -> Gender -> Animacy -> N ; mkN : Str -> Gender -> Animacy -> N ;
-- Worst case - give six singular forms: -- Worst case - give six singular forms:
-- Nominative, Genetive, Dative, Accusative, Instructive and Prepositional; -- Nominative, Genetive, Dative, Accusative, Instructive and Prepositional;
@@ -82,16 +94,13 @@ oper
-- to the Nominative or the Genetive one) is actually of no help, -- to the Nominative or the Genetive one) is actually of no help,
-- since there are a lot of exceptions and the gain is just one form less. -- since there are a lot of exceptions and the gain is just one form less.
mkN : (nomSg, genSg, datSg, accSg, instSg, preposSg, mkN : (nomSg,_,_,_,_,_,_,_,_,_,_,prepPl : Str) -> Gender -> Animacy -> N ;
nomPl, genPl, datPl, accPl, instPl, preposPl: Str) -> Gender -> Animacy -> N ;
-- мужчина, мужчины, мужчине, мужчину, мужчиной, мужчине
-- мужчины, мужчин, мужчинам, мужчин, мужчинами, мужчинах -- мужчина, мужчины, мужчине, мужчину, мужчиной, мужчине
-- мужчины, мужчин, мужчинам, мужчин, мужчинами, мужчинах
-- The regular function captures the variants for some popular nouns } ;
-- endings below:
regN : Str -> N ;
-- Here are some common patterns. The list is far from complete. -- Here are some common patterns. The list is far from complete.
@@ -140,14 +149,12 @@ oper
-- Proper names. -- Proper names.
mkPN : Str -> Gender -> Animacy -> PN ; -- "Иван", "Маша" mkPN : overload {
nounPN : N -> PN ; mkPN : Str -> PN ;
mkPN : Str -> Gender -> Animacy -> PN ; -- "Иван", "Маша"
-- On the top level, it is maybe $CN$ that is used rather than $N$, and mkPN : N -> PN ;
-- $NP$ rather than $PN$. } ;
mkCN : N -> CN ;
mkNP : Str -> Gender -> Animacy -> NP ;
--2 Adjectives --2 Adjectives
@@ -166,18 +173,15 @@ oper
-- in the current description, otherwise there would be 32 forms for -- in the current description, otherwise there would be 32 forms for
-- positive degree. -- positive degree.
-- mkA : ( : Str) -> A ;
-- The regular function captures the variants for some popular adjective -- The regular function captures the variants for some popular adjective
-- endings below. The first string agrument is the masculine singular form, -- endings below. The first string agrument is the masculine singular form,
-- the second is comparative: -- the second is comparative:
-- Invariable adjective is a special case, with only on string needed.
regA : Str -> Str -> A ; mkA : overload {
mkA : Str -> A ; -- khaki, mini, hindi, netto
mkA : Str -> Str -> A ;
-- Invariable adjective is a special case. } ;
adjInvar : Str -> A ; -- khaki, mini, hindi, netto
-- Some regular patterns depending on the ending. -- Some regular patterns depending on the ending.
@@ -202,12 +206,6 @@ oper
-- Syntactic forms are based on the positive forms. -- Syntactic forms are based on the positive forms.
-- mkADeg : A -> Str -> ADeg ;
-- On top level, there are adjectival phrases. The most common case is
-- just to use a one-place adjective.
-- ap : A -> IsPostfixAdj -> AP ;
--2 Adverbs --2 Adverbs
-- Adverbs are not inflected. -- Adverbs are not inflected.
@@ -245,17 +243,6 @@ imperfective: Aspect;
perfective: Aspect ; perfective: Aspect ;
-- The worst case need 6 forms of the present tense in indicative mood
-- ("я бегу", "ты бежишь", "он бежит", "мы бежим", "вы бежите", "они бегут"),
-- a past form (singular, masculine: "я бежал"), an imperative form
-- (singular, second person: "беги"), an infinitive ("бежать").
-- Inherent aspect should also be specified.
-- mkVerbum : Aspect -> (presentSgP1,presentSgP2,presentSgP3,
mkV : Aspect -> (presentSgP1,presentSgP2,presentSgP3,
presentPlP1,presentPlP2,presentPlP3,
pastSgMasculine,imperative,infinitive: Str) -> V ;
-- Common conjugation patterns are two conjugations: -- Common conjugation patterns are two conjugations:
-- first - verbs ending with "-ать/-ять" and second - "-ить/-еть". -- first - verbs ending with "-ать/-ять" and second - "-ить/-еть".
-- Instead of 6 present forms of the worst case, we only need -- Instead of 6 present forms of the worst case, we only need
@@ -266,19 +253,38 @@ perfective: Aspect ;
-- "я люб-лю", "ты люб-ишь". Stems shoud be the same. -- "я люб-лю", "ты люб-ишь". Stems shoud be the same.
-- So the definition for verb "любить" looks like: -- So the definition for verb "любить" looks like:
-- regV Imperfective Second "люб" "лю" "любил" "люби" "любить"; -- regV Imperfective Second "люб" "лю" "любил" "люби" "любить";
--
-- There is no one-argument case.
regV :Aspect -> Conjugation -> (stemPresentSgP1,endingPresentSgP1, mkV : overload {
pastSgP1,imperative,infinitive : Str) -> V ; mkV : Aspect -> Conjugation -> (stemPrsSgP1,endPrsSgP1,pastSgP1,imp,inf : Str) -> V ;
-- The worst case need 6 forms of the present tense in indicative mood
-- ("я бегу", "ты бежишь", "он бежит", "мы бежим", "вы бежите", "они бегут"),
-- a past form (singular, masculine: "я бежал"), an imperative form
-- (singular, second person: "беги"), an infinitive ("бежать").
-- Inherent aspect should also be specified.
mkV : Aspect -> (presSgP1,presSgP2,presSgP3,presPlP1,presPlP2,presPlP3,pastSgMasc,imp,inf: Str) -> V ;
} ;
--3 Two-place verbs
-- Two-place verbs, and the special case with direct object. Notice that -- Two-place verbs, and the special case with direct object. Notice that
-- a particle can be included in a $V$. -- a particle can be included in a $V$.
mkV2 : V -> Str -> Case -> V2 ; -- "войти в дом"; "в", accusative mkV2 : overload {
mkV3 : V -> Str -> Str -> Case -> Case -> V3 ; -- "сложить письмо в конверт" mkV2 : V -> V2 ; -- "видеть", "любить"
dirV2 : V -> V2 ; -- "видеть", "любить" mkV2 : V -> Str -> Case -> V2 ; -- "войти в дом"; "в", accusative
} ;
--3 Three-place verbs
tvDirDir : V -> V3 ; tvDirDir : V -> V3 ;
mkV3 : V -> Str -> Str -> Case -> Case -> V3 ; -- "сложить письмо в конверт"
-- The definitions should not bother the user of the API. So they are -- The definitions should not bother the user of the API. So they are
-- hidden from the document. -- hidden from the document.
--. --.
@@ -333,7 +339,7 @@ dolzhen = Dolzhen;
} ** {lock_N = <>}; } ** {lock_N = <>};
mkN = \nomSg, genSg, datSg, accSg, instSg, preposSg, mk12N = \nomSg, genSg, datSg, accSg, instSg, preposSg,
nomPl, genPl, datPl, accPl, instPl, preposPl, g, anim -> nomPl, genPl, datPl, accPl, instPl, preposPl, g, anim ->
{ {
s = table { s = table {
@@ -431,16 +437,22 @@ regN = \ray ->
mkN3 f p r = (UseN f) ** {s2 = p.s ; c=p.c; s3=r.s ; c2=r.c; lock_N3 = <>} ; mkN3 f p r = (UseN f) ** {s2 = p.s ; c=p.c; s3=r.s ; c2=r.c; lock_N3 = <>} ;
mkPN = \ivan, g, anim -> mk3PN = \ivan, g, anim ->
case g of { case g of {
Masc => mkProperNameMasc ivan anim ; Masc => mkProperNameMasc ivan anim ;
_ => mkProperNameFem ivan anim _ => mkProperNameFem ivan anim
} ** {lock_PN =<>}; } ** {lock_PN =<>};
nounPN n = {s=\\c => n.s! SF Sg c; anim=n.anim; g=n.g; lock_PN=<>}; nounPN n = {s=\\c => n.s! SF Sg c; anim=n.anim; g=n.g; lock_PN=<>};
mkCN = UseN; -- On the top level, it is maybe $CN$ that is used rather than $N$, and
-- $NP$ rather than $PN$.
mkNP = \x,y,z -> UsePN (mkPN x y z) ; makeCN : N -> CN ;
makeNP : Str -> Gender -> Animacy -> NP ;
makeCN = UseN;
makeNP = \x,y,z -> UsePN (mk3PN x y z) ;
-- Adjective definitions -- Adjective definitions
regA = \ray, comp -> regA = \ray, comp ->
@@ -474,7 +486,7 @@ regN = \ray ->
-- Verb definitions -- Verb definitions
-- mkVerbum = \asp, sgP1, sgP2, sgP3, plP1, plP2, plP3, -- mkVerbum = \asp, sgP1, sgP2, sgP3, plP1, plP2, plP3,
mkV = \asp, sgP1, sgP2, sgP3, plP1, plP2, plP3, mk9V = \asp, sgP1, sgP2, sgP3, plP1, plP2, plP3,
sgMascPast, imperSgP2, inf -> case asp of { sgMascPast, imperSgP2, inf -> case asp of {
Perfective => Perfective =>
mkVerb (perfectiveActivePattern inf imperSgP2 mkVerb (perfectiveActivePattern inf imperSgP2
@@ -510,8 +522,8 @@ regN = \ray ->
VSubj gn => aller.s ! VFORM vox (VSUB gn) VSubj gn => aller.s ! VFORM vox (VSUB gn)
}; t = Present ; a = aller.asp ; w = vox ; lock_V = <>} ; }; t = Present ; a = aller.asp ; w = vox ; lock_V = <>} ;
-} -}
mkV2 v p cas = v ** {s2 = p ; c = cas; lock_V2 = <>}; mk2V2 v p cas = v ** {s2 = p ; c = cas; lock_V2 = <>};
dirV2 v = mkV2 v [] Acc; dirV2 v = mk2V2 v [] Acc;
tvDirDir v = mkV3 v "" "" Acc Dat; tvDirDir v = mkV3 v "" "" Acc Dat;
@@ -523,438 +535,69 @@ regN = \ray ->
mkV3 v s1 s2 c1 c2 = v ** {s2 = s1; c = c1; s4 = s2; c2=c2; lock_V3 = <>}; mkV3 v s1 s2 c1 c2 = v ** {s2 = s1; c = c1; s4 = s2; c2=c2; lock_V3 = <>};
----2 Parameters ---------------------------
---- -- overloaded API started by AR 6/7/2007
---- To abstract over gender names, we define the following identifiers.
-- mkN = overload {
--oper mkN : Str -> N = regN ;
-- Gender : Type ; mkN : Str -> Gender -> Animacy -> N = mkIndeclinableNoun ;
-- mkN : (nomSg,_,_,_,_,_,_,_,_,_,_,prepPl : Str) -> Gender -> Animacy -> N = mk12N ;
-- human : Gender ; } ;
-- nonhuman : Gender ;
-- masculine : Gender ; regN : Str -> N ;
-- mkIndeclinableNoun: Str -> Gender -> Animacy -> N ;
---- To abstract over number names, we define the following. mk12N : (nomSg, genSg, datSg, accSg, instSg, preposSg,
-- nomPl, genPl, datPl, accPl, instPl, preposPl: Str) -> Gender -> Animacy -> N ;
-- Number : Type ;
--
-- singular : Number ; mkPN = overload {
-- plural : Number ; mkPN : Str -> PN = regPN ;
-- mkPN : Str -> Gender -> Animacy -> PN = mk3PN ; -- "Иван", "Маша"
---- To abstract over case names, we define the following. mkPN : N -> PN = nounPN ;
-- } ;
-- Case : Type ;
-- regPN : Str -> PN = \s -> nounPN (regN s) ;
-- nominative : Case ; mk3PN : Str -> Gender -> Animacy -> PN ; -- "Иван", "Маша"
-- genitive : Case ; nounPN : N -> PN ;
--
---- Prepositions are used in many-argument functions for rection. -- mkADeg : A -> Str -> ADeg ;
--
-- Preposition : Type ; -- On top level, there are adjectival phrases. The most common case is
-- -- just to use a one-place adjective.
-- -- ap : A -> IsPostfixAdj -> AP ;
----2 Nouns
-- mkA = overload {
---- Worst case: give all four forms and the semantic gender. mkA : Str -> A = adjInvar ; -- khaki, mini, hindi, netto
-- mkA : Str -> Str -> A = regA ;
-- mkN : (man,men,man's,men's : Str) -> N ; } ;
--
---- The regular function captures the variants for nouns ending with regA : Str -> Str -> A ;
---- "s","sh","x","z" or "y": "kiss - kisses", "flash - flashes"; adjInvar : Str -> A ; -- khaki, mini, hindi, netto
---- "fly - flies" (but "toy - toys"),
-- -- mkVerbum : Aspect -> (presentSgP1,presentSgP2,presentSgP3,
-- regN : Str -> N ;
-- mkV = overload {
---- In practice the worst case is just: give singular and plural nominative. mkV : Aspect -> Conjugation -> (stemPrsSgP1,endPrsSgP1,pastSgP1,imp,inf : Str) -> V = regV ;
-- mkV : Aspect -> (presSgP1,presSgP2,presSgP3,presPlP1,presPlP2,presPlP3,pastSgMasc,imp,inf: Str) -> V = mk9V ;
-- mk2N : (man,men : Str) -> N ;
-- } ;
---- All nouns created by the previous functions are marked as
---- $nonhuman$. If you want a $human$ noun, wrap it with the following regV :Aspect -> Conjugation -> (stemPresentSgP1,endingPresentSgP1,
---- function: pastSgP1,imperative,infinitive : Str) -> V ;
-- mk9V : Aspect -> (presentSgP1,presentSgP2,presentSgP3,
-- genderN : Gender -> N -> N ; presentPlP1,presentPlP2,presentPlP3,
-- pastSgMasculine,imperative,infinitive: Str) -> V ;
----3 Compound nouns
----
---- A compound noun ia an uninflected string attached to an inflected noun, mkV2 = overload {
---- such as "baby boom", "chief executive officer". mkV2 : V -> V2 = dirV2 ; -- "видеть", "любить"
-- mkV2 : V -> Str -> Case -> V2 = mk2V2 ; -- "войти в дом"; "в", accusative
-- compoundN : Str -> N -> N ; } ;
--
-- mk2V2 : V -> Str -> Case -> V2 ; -- "войти в дом"; "в", accusative
----3 Relational nouns dirV2 : V -> V2 ; -- "видеть", "любить"
----
---- Relational nouns ("daughter of x") need a preposition.
--
-- mkN2 : N -> Preposition -> N2 ;
--
---- The most common preposition is "of", and the following is a
---- shortcut for regular relational nouns with "of".
--
-- regN2 : Str -> N2 ;
--
---- Use the function $mkPreposition$ or see the section on prepositions below to
---- form other prepositions.
----
---- Three-place relational nouns ("the connection from x to y") need two prepositions.
--
-- mkN3 : N -> Preposition -> Preposition -> N3 ;
--
--
----3 Relational common noun phrases
----
---- In some cases, you may want to make a complex $CN$ into a
---- relational noun (e.g. "the old town hall of").
--
-- cnN2 : CN -> Preposition -> N2 ;
-- cnN3 : CN -> Preposition -> Preposition -> N3 ;
--
----
----3 Proper names and noun phrases
----
---- Proper names, with a regular genitive, are formed as follows
--
-- regPN : Str -> Gender -> PN ; -- John, John's
--
---- Sometimes you can reuse a common noun as a proper name, e.g. "Bank".
--
-- nounPN : N -> PN ;
--
---- To form a noun phrase that can also be plural and have an irregular
---- genitive, you can use the worst-case function.
--
-- mkNP : Str -> Str -> Number -> Gender -> NP ;
--
----2 Adjectives
--
---- Non-comparison one-place adjectives need two forms: one for
---- the adjectival and one for the adverbial form ("free - freely")
--
-- mkA : (free,freely : Str) -> A ;
--
---- For regular adjectives, the adverbial form is derived. This holds
---- even for cases with the variation "happy - happily".
--
-- regA : Str -> A ;
--
----3 Two-place adjectives
----
---- Two-place adjectives need a preposition for their second argument.
--
-- mkA2 : A -> Preposition -> A2 ;
--
---- Comparison adjectives may two more forms.
--
-- ADeg : Type ;
--
-- mkADeg : (good,better,best,well : Str) -> ADeg ;
--
---- The regular pattern recognizes two common variations:
---- "-e" ("rude" - "ruder" - "rudest") and
---- "-y" ("happy - happier - happiest - happily")
--
-- regADeg : Str -> ADeg ; -- long, longer, longest
--
---- However, the duplication of the final consonant is nor predicted,
---- but a separate pattern is used:
--
-- duplADeg : Str -> ADeg ; -- fat, fatter, fattest
--
---- If comparison is formed by "more, "most", as in general for
---- long adjective, the following pattern is used:
--
-- compoundADeg : A -> ADeg ; -- -/more/most ridiculous
--
---- From a given $ADeg$, it is possible to get back to $A$.
--
-- adegA : ADeg -> A ;
--
--
----2 Adverbs
--
---- Adverbs are not inflected. Most lexical ones have position
---- after the verb. Some can be preverbal (e.g. "always").
--
-- mkAdv : Str -> Adv ;
-- mkAdV : Str -> AdV ;
--
---- Adverbs modifying adjectives and sentences can also be formed.
--
-- mkAdA : Str -> AdA ;
--
----2 Prepositions
----
---- A preposition as used for rection in the lexicon, as well as to
---- build $PP$s in the resource API, just requires a string.
--
-- mkPreposition : Str -> Preposition ;
-- mkPrep : Str -> Prep ;
--
---- (These two functions are synonyms.)
--
----2 Verbs
----
---- Except for "be", the worst case needs five forms: the infinitive and
---- the third person singular present, the past indicative, and the
---- past and present participles.
--
-- mkV : (go, goes, went, gone, going : Str) -> V ;
--
---- The regular verb function recognizes the special cases where the last
---- character is "y" ("cry - cries" but "buy - buys") or "s", "sh", "x", "z"
---- ("fix - fixes", etc).
--
-- regV : Str -> V ;
--
---- The following variant duplicates the last letter in the forms like
---- "rip - ripped - ripping".
--
-- regDuplV : Str -> V ;
--
---- There is an extensive list of irregular verbs in the module $IrregularEng$.
---- In practice, it is enough to give three forms,
---- e.g. "drink - drank - drunk", with a variant indicating consonant
---- duplication in the present participle.
--
-- irregV : (drink, drank, drunk : Str) -> V ;
-- irregDuplV : (get, got, gotten : Str) -> V ;
--
--
----3 Verbs with a particle.
----
---- The particle, such as in "switch on", is given as a string.
--
-- partV : V -> Str -> V ;
--
----3 Reflexive verbs
----
---- By default, verbs are not reflexive; this function makes them that.
--
-- reflV : V -> V ;
--
----3 Two-place verbs
----
---- Two-place verbs need a preposition, except the special case with direct object.
---- (transitive verbs). Notice that a particle comes from the $V$.
--
-- mkV2 : V -> Preposition -> V2 ;
--
-- dirV2 : V -> V2 ;
--
----3 Three-place verbs
----
---- Three-place (ditransitive) verbs need two prepositions, of which
---- the first one or both can be absent.
--
-- mkV3 : V -> Preposition -> Preposition -> V3 ; -- speak, with, about
-- dirV3 : V -> Preposition -> V3 ; -- give,_,to
-- dirdirV3 : V -> V3 ; -- give,_,_
--
----3 Other complement patterns
----
---- Verbs and adjectives can take complements such as sentences,
---- questions, verb phrases, and adjectives.
--
-- mkV0 : V -> V0 ;
-- mkVS : V -> VS ;
-- mkV2S : V -> Str -> V2S ;
-- mkVV : V -> VV ;
-- mkV2V : V -> Str -> Str -> V2V ;
-- mkVA : V -> VA ;
-- mkV2A : V -> Str -> V2A ;
-- mkVQ : V -> VQ ;
-- mkV2Q : V -> Str -> V2Q ;
--
-- mkAS : A -> AS ;
-- mkA2S : A -> Str -> A2S ;
-- mkAV : A -> AV ;
-- mkA2V : A -> Str -> A2V ;
--
---- Notice: categories $V2S, V2V, V2A, V2Q$ are in v 1.0 treated
---- just as synonyms of $V2$, and the second argument is given
---- as an adverb. Likewise $AS, A2S, AV, A2V$ are just $A$.
---- $V0$ is just $V$.
--
-- V0, V2S, V2V, V2A, V2Q : Type ;
-- AS, A2S, AV, A2V : Type ;
--
--
----2 Definitions of paradigms
----
---- The definitions should not bother the user of the API. So they are
---- hidden from the document.
----.
--
-- Gender = MorphoEng.Gender ;
-- Number = MorphoEng.Number ;
-- Case = MorphoEng.Case ;
-- human = Masc ;
-- nonhuman = Neutr ;
-- masculine = Masc ;
-- feminine = Fem ;
-- singular = Sg ;
-- plural = Pl ;
-- nominative = Nom ;
-- genitive = Gen ;
--
-- Preposition = Str ;
--
-- regN = \ray ->
-- let
-- ra = Predef.tk 1 ray ;
-- y = Predef.dp 1 ray ;
-- r = Predef.tk 2 ray ;
-- ay = Predef.dp 2 ray ;
-- rays =
-- case y of {
-- "y" => y2ie ray "s" ;
-- "s" => ray + "es" ;
-- "z" => ray + "es" ;
-- "x" => ray + "es" ;
-- _ => case ay of {
-- "sh" => ray + "es" ;
-- "ch" => ray + "es" ;
-- _ => ray + "s"
-- }
-- }
-- in
-- mk2N ray rays ;
--
-- mk2N = \man,men ->
-- let mens = case last men of {
-- "s" => men + "'" ;
-- _ => men + "'s"
-- }
-- in
-- mkN man men (man + "'s") mens ;
--
-- mkN = \man,men,man's,men's ->
-- mkNoun man man's men men's ** {g = Neutr ; lock_N = <>} ;
--
-- genderN g man = {s = man.s ; g = g ; lock_N = <>} ;
--
-- compoundN s n = {s = \\x,y => s ++ n.s ! x ! y ; g=n.g ; lock_N = <>} ;
--
-- mkN2 = \n,p -> n ** {lock_N2 = <> ; c2 = p} ;
-- regN2 n = mkN2 (regN n) (mkPreposition "of") ;
-- mkN3 = \n,p,q -> n ** {lock_N3 = <> ; c2 = p ; c3 = q} ;
-- cnN2 = \n,p -> n ** {lock_N2 = <> ; c2 = p} ;
-- cnN3 = \n,p,q -> n ** {lock_N3 = <> ; c2 = p ; c3 = q} ;
--
-- regPN n g = nameReg n g ** {lock_PN = <>} ;
-- nounPN n = {s = n.s ! singular ; g = n.g ; lock_PN = <>} ;
-- mkNP x y n g = {s = table {Gen => x ; _ => y} ; a = agrP3 n ;
-- lock_NP = <>} ;
--
-- mkA a b = mkAdjective a a a b ** {lock_A = <>} ;
-- regA a = regAdjective a ** {lock_A = <>} ;
--
-- mkA2 a p = a ** {c2 = p ; lock_A2 = <>} ;
--
-- ADeg = A ; ----
--
-- mkADeg a b c d = mkAdjective a b c d ** {lock_A = <>} ;
--
-- regADeg happy =
-- let
-- happ = init happy ;
-- y = last happy ;
-- happie = case y of {
-- "y" => happ + "ie" ;
-- "e" => happy ;
-- _ => happy + "e"
-- } ;
-- happily = case y of {
-- "y" => happ + "ily" ;
-- _ => happy + "ly"
-- } ;
-- in mkADeg happy (happie + "r") (happie + "st") happily ;
--
-- duplADeg fat =
-- mkADeg fat
-- (fat + last fat + "er") (fat + last fat + "est") (fat + "ly") ;
--
-- compoundADeg a =
-- let ad = (a.s ! AAdj Posit)
-- in mkADeg ad ("more" ++ ad) ("most" ++ ad) (a.s ! AAdv) ;
--
-- adegA a = a ;
--
-- mkAdv x = ss x ** {lock_Adv = <>} ;
-- mkAdV x = ss x ** {lock_AdV = <>} ;
-- mkAdA x = ss x ** {lock_AdA = <>} ;
--
-- mkPreposition p = p ;
-- mkPrep p = ss p ** {lock_Prep = <>} ;
--
-- mkV a b c d e = mkVerb a b c d e ** {s1 = [] ; lock_V = <>} ;
--
-- regV cry =
-- let
-- cr = init cry ;
-- y = last cry ;
-- cries = (regN cry).s ! Pl ! Nom ; -- !
-- crie = init cries ;
-- cried = case last crie of {
-- "e" => crie + "d" ;
-- _ => crie + "ed"
-- } ;
-- crying = case y of {
-- "e" => case last cr of {
-- "e" => cry + "ing" ;
-- _ => cr + "ing"
-- } ;
-- _ => cry + "ing"
-- }
-- in mkV cry cries cried cried crying ;
--
-- regDuplV fit =
-- let fitt = fit + last fit in
-- mkV fit (fit + "s") (fitt + "ed") (fitt + "ed") (fitt + "ing") ;
--
-- irregV x y z = let reg = (regV x).s in
-- mkV x (reg ! VPres) y z (reg ! VPresPart) ** {s1 = [] ; lock_V = <>} ;
--
-- irregDuplV fit y z =
-- let
-- fitting = (regDuplV fit).s ! VPresPart
-- in
-- mkV fit (fit + "s") y z fitting ;
--
-- partV v p = verbPart v p ** {lock_V = <>} ;
-- reflV v = {s = v.s ; part = v.part ; lock_V = v.lock_V ; isRefl = True} ;
--
-- mkV2 v p = v ** {s = v.s ; s1 = v.s1 ; c2 = p ; lock_V2 = <>} ;
-- dirV2 v = mkV2 v [] ;
--
-- mkV3 v p q = v ** {s = v.s ; s1 = v.s1 ; c2 = p ; c3 = q ; lock_V3 = <>} ;
-- dirV3 v p = mkV3 v [] p ;
-- dirdirV3 v = dirV3 v [] ;
--
-- mkVS v = v ** {lock_VS = <>} ;
-- mkVV v = {
-- s = table {VVF vf => v.s ! vf ; _ => variants {}} ;
-- isAux = False ; lock_VV = <>
-- } ;
-- mkVQ v = v ** {lock_VQ = <>} ;
--
-- V0 : Type = V ;
-- V2S, V2V, V2Q, V2A : Type = V2 ;
-- AS, A2S, AV : Type = A ;
-- A2V : Type = A2 ;
--
-- mkV0 v = v ** {lock_V = <>} ;
-- mkV2S v p = mkV2 v p ** {lock_V2 = <>} ;
-- mkV2V v p t = mkV2 v p ** {s4 = t ; lock_V2 = <>} ;
-- mkVA v = v ** {lock_VA = <>} ;
-- mkV2A v p = mkV2 v p ** {lock_V2A = <>} ;
-- mkV2Q v p = mkV2 v p ** {lock_V2 = <>} ;
--
-- mkAS v = v ** {lock_A = <>} ;
-- mkA2S v p = mkA2 v p ** {lock_A = <>} ;
-- mkAV v = v ** {lock_A = <>} ;
-- mkA2V v p = mkA2 v p ** {lock_A2 = <>} ;
--
} ; } ;

View File

@@ -6,13 +6,13 @@ concrete ExtraSpa of ExtraSpaAbs = ExtraRomanceSpa **
"yo" "me" "me" "mí" "yo" "me" "me" "mí"
"mi" "mi" "mis" "mis" "mi" "mi" "mis" "mis"
Fem Sg P1 ; Fem Sg P1 ;
these8fem_NP = mkNP ["estas"] Fem Pl ; these8fem_NP = makeNP ["estas"] Fem Pl ;
they8fem_Pron = mkPronoun they8fem_Pron = mkPronoun
"ellas" "las" "les" "ellas" "ellas" "las" "les" "ellas"
"su" "su" "sus" "sus" "su" "su" "sus" "sus"
Fem Pl P3 ; Fem Pl P3 ;
this8fem_NP = pn2np (mkPN ["esta"] Fem) ; this8fem_NP = pn2np (mkPN ["esta"] Fem) ;
those8fem_NP = mkNP ["esas"] Fem Pl ; those8fem_NP = makeNP ["esas"] Fem Pl ;
we8fem_Pron = mkPronoun we8fem_Pron = mkPronoun
"nosotras" "nos" "nos" "nosotras" "nosotras" "nos" "nos" "nosotras"

View File

@@ -319,7 +319,7 @@ oper
} }
} ; } ;
mkNP x g n = {s = (pn2np (mk2PN x g)).s; a = agrP3 g n ; hasClit = False} ** {lock_NP = <>} ; makeNP x g n = {s = (pn2np (mk2PN x g)).s; a = agrP3 g n ; hasClit = False} ** {lock_NP = <>} ;
mk5A a b c d e = mk5A a b c d e =
compADeg {s = \\_ => (mkAdj a b c d e).s ; isPre = False ; lock_A = <>} ; compADeg {s = \\_ => (mkAdj a b c d e).s ; isPre = False ; lock_A = <>} ;
@@ -430,7 +430,7 @@ oper
-- To form a noun phrase that can also be plural, -- To form a noun phrase that can also be plural,
-- you can use the worst-case function. -- you can use the worst-case function.
mkNP : Str -> Gender -> Number -> NP ; makeNP : Str -> Gender -> Number -> NP ;
mkA = overload { mkA = overload {
mkA : (util : Str) -> A = regA ; mkA : (util : Str) -> A = regA ;

View File

@@ -27,7 +27,7 @@ lin
can_VV = mkVV (verboV (poder_58 "poder")) ; can_VV = mkVV (verboV (poder_58 "poder")) ;
during_Prep = mkPrep "durante" ; ---- during_Prep = mkPrep "durante" ; ----
either7or_DConj = {s1,s2 = "o" ; n = Sg} ; either7or_DConj = {s1,s2 = "o" ; n = Sg} ;
everybody_NP = mkNP ["todos"] Masc Pl ; everybody_NP = makeNP ["todos"] Masc Pl ;
every_Det = {s = \\_,_ => "cada" ; n = Sg} ; every_Det = {s = \\_,_ => "cada" ; n = Sg} ;
everything_NP = pn2np (mkPN ["todo"] Masc) ; everything_NP = pn2np (mkPN ["todo"] Masc) ;
everywhere_Adv = ss ["en todas partes"] ; everywhere_Adv = ss ["en todas partes"] ;
@@ -92,12 +92,12 @@ lin
Pl => \\g,c => prepCase c ++ genForms "esos" "esas" ! g Pl => \\g,c => prepCase c ++ genForms "esos" "esas" ! g
} }
} ; } ;
that_NP = mkNP ["eso"] Masc Sg ; that_NP = makeNP ["eso"] Masc Sg ;
there_Adv = mkAdv "allí" ; -- allá there_Adv = mkAdv "allí" ; -- allá
there7to_Adv = mkAdv ["para allá"] ; there7to_Adv = mkAdv ["para allá"] ;
there7from_Adv = mkAdv ["de allá"] ; there7from_Adv = mkAdv ["de allá"] ;
therefore_PConj = ss ["por eso"] ; therefore_PConj = ss ["por eso"] ;
these_NP = mkNP ["estos"] Masc Pl ; these_NP = makeNP ["estos"] Masc Pl ;
they_Pron = mkPronoun they_Pron = mkPronoun
"ellos" "los" "les" "ellos" "ellos" "los" "les" "ellos"
"su" "su" "sus" "sus" "su" "su" "sus" "sus"
@@ -109,7 +109,7 @@ lin
} }
} ; } ;
this_NP = pn2np (mkPN ["esto"] Masc) ; this_NP = pn2np (mkPN ["esto"] Masc) ;
those_NP = mkNP ["esos"] Masc Pl ; those_NP = makeNP ["esos"] Masc Pl ;
through_Prep = mkPrep "por" ; through_Prep = mkPrep "por" ;
too_AdA = ss "demasiado" ; too_AdA = ss "demasiado" ;
to_Prep = complDat ; to_Prep = complDat ;

View File

@@ -431,7 +431,7 @@ oper
regPN n = regGenPN n utrum ; regPN n = regGenPN n utrum ;
regGenPN n g = {s = \\c => mkCase c n ; g = g} ** {lock_PN = <>} ; regGenPN n g = {s = \\c => mkCase c n ; g = g} ** {lock_PN = <>} ;
nounPN n = {s = n.s ! singular ! Indef ; g = n.g ; lock_PN = <>} ; nounPN n = {s = n.s ! singular ! Indef ; g = n.g ; lock_PN = <>} ;
mkNP x y n g = makeNP x y n g =
{s = table {NPPoss _ => y ; _ => x} ; a = agrP3 g n ; p = P3 ; {s = table {NPPoss _ => y ; _ => x} ; a = agrP3 g n ; p = P3 ;
lock_NP = <>} ; lock_NP = <>} ;
@@ -614,7 +614,7 @@ oper
-- To form a noun phrase that can also be plural and have an irregular -- To form a noun phrase that can also be plural and have an irregular
-- genitive, you can use the worst-case function. -- genitive, you can use the worst-case function.
mkNP : Str -> Str -> Number -> Gender -> NP ; makeNP : Str -> Str -> Number -> Gender -> NP ;