mirror of
https://github.com/GrammaticalFramework/gf-rgl.git
synced 2026-05-27 17:08:54 -06:00
Merge branch 'GrammaticalFramework:master' into master
This commit is contained in:
33
.github/workflows/test.yml
vendored
Normal file
33
.github/workflows/test.yml
vendored
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
name: Check that the RGL can successfully build
|
||||||
|
|
||||||
|
on:
|
||||||
|
- push
|
||||||
|
- pull_request
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-20.04
|
||||||
|
env:
|
||||||
|
GF_VERSION: 3.11
|
||||||
|
DEST: gf-rgl
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Download GF
|
||||||
|
uses: dsaltares/fetch-gh-release-asset@1.1.1
|
||||||
|
with:
|
||||||
|
repo: 'GrammaticalFramework/gf-core'
|
||||||
|
version: 'tags/${{ env.GF_VERSION }}'
|
||||||
|
file: 'gf-${{ env.GF_VERSION }}-ubuntu-20.04.deb'
|
||||||
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
- name: Install GF
|
||||||
|
run: |
|
||||||
|
sudo dpkg -i gf-${GF_VERSION}-ubuntu-20.04.deb
|
||||||
|
|
||||||
|
- name: Build RGL
|
||||||
|
run: |
|
||||||
|
mkdir -p ${DEST}
|
||||||
|
bash Setup.sh --dest=${DEST} --gf=gf --verbose
|
||||||
@@ -7,8 +7,6 @@ Aarne Ranta
|
|||||||
The following table gives the languages currently available in the
|
The following table gives the languages currently available in the
|
||||||
GF Resource Grammar Library.
|
GF Resource Grammar Library.
|
||||||
|
|
||||||
For another view, see the
|
|
||||||
[The Resource Grammar Library coverage map http://www.postcrashgames.com/gf_world/] .
|
|
||||||
|
|
||||||
Corrections and additions are welcome! Notice that only those parts of implementations
|
Corrections and additions are welcome! Notice that only those parts of implementations
|
||||||
that are currently available via https://github.com/GrammaticalFramework/gf-rgl/
|
that are currently available via https://github.com/GrammaticalFramework/gf-rgl/
|
||||||
|
|||||||
@@ -32,7 +32,6 @@ the library, view all functions in a module's scope, and quickly jump to their d
|
|||||||
Other relevant documents:
|
Other relevant documents:
|
||||||
- [The RGL Status Document ../status.html]: the current status of different languages
|
- [The RGL Status Document ../status.html]: the current status of different languages
|
||||||
and the authors of each grammar
|
and the authors of each grammar
|
||||||
- [The Resource Grammar Library coverage map http://www.postcrashgames.com/gf_world/]
|
|
||||||
- [RGL Documentation and Publications ../rgl-publications.html]: links to publications and other documentation
|
- [RGL Documentation and Publications ../rgl-publications.html]: links to publications and other documentation
|
||||||
- [More modules ../gfdoc/sources.html]: extra modules, dictionaries, and
|
- [More modules ../gfdoc/sources.html]: extra modules, dictionaries, and
|
||||||
the internals of the resource grammar
|
the internals of the resource grammar
|
||||||
|
|||||||
@@ -52,3 +52,4 @@ Tha,Thai,thai,,to_thai,,,,,,y
|
|||||||
Tur,Turkish,turkish,,,y,,,n,,n
|
Tur,Turkish,turkish,,,y,,,n,,n
|
||||||
Urd,Urdu,urdu,Hindustani,,,,,,,y
|
Urd,Urdu,urdu,Hindustani,,,,,,,y
|
||||||
Som,Somali,somali,,,,,n,n,,n
|
Som,Somali,somali,,,,,n,n,,n
|
||||||
|
Zul,Zulu,zulu,,,,,n,n,,n
|
||||||
|
|||||||
|
@@ -93,6 +93,7 @@ abstract Cat = Common ** {
|
|||||||
|
|
||||||
Numeral ; -- cardinal or ordinal in words e.g. "five/fifth"
|
Numeral ; -- cardinal or ordinal in words e.g. "five/fifth"
|
||||||
Digits ; -- cardinal or ordinal in digits e.g. "1,000/1,000th"
|
Digits ; -- cardinal or ordinal in digits e.g. "1,000/1,000th"
|
||||||
|
Decimal ; -- decimal number e.g. "1/2/3.14/-1"
|
||||||
|
|
||||||
--2 Structural words
|
--2 Structural words
|
||||||
|
|
||||||
@@ -128,7 +129,8 @@ abstract Cat = Common ** {
|
|||||||
N3 ; -- three-place relational noun e.g. "connection"
|
N3 ; -- three-place relational noun e.g. "connection"
|
||||||
GN ; -- given name e.g. "George"
|
GN ; -- given name e.g. "George"
|
||||||
SN ; -- second name e.g. "Washington"
|
SN ; -- second name e.g. "Washington"
|
||||||
PN ; -- proper name e.g. "Paris"
|
LN ; -- location name e.g. "Sweden"
|
||||||
|
PN ; -- proper name
|
||||||
|
|
||||||
-- DEPRECATED: QuantSg, QuantPl
|
-- DEPRECATED: QuantSg, QuantPl
|
||||||
--- QuantSg ;-- quantifier ('nucleus' of sing. Det) e.g. "every"
|
--- QuantSg ;-- quantifier ('nucleus' of sing. Det) e.g. "every"
|
||||||
|
|||||||
@@ -44,4 +44,8 @@ abstract Common = {
|
|||||||
Pol ; -- polarity e.g. positive, negative
|
Pol ; -- polarity e.g. positive, negative
|
||||||
Ant ; -- anteriority e.g. simultaneous, anterior
|
Ant ; -- anteriority e.g. simultaneous, anterior
|
||||||
|
|
||||||
|
--2 Measures
|
||||||
|
|
||||||
|
MU ; -- unit of measurement e.g. "km", "cm", "%"
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ fun
|
|||||||
InflectionN2 : N2 -> Inflection ;
|
InflectionN2 : N2 -> Inflection ;
|
||||||
InflectionN3 : N3 -> Inflection ;
|
InflectionN3 : N3 -> Inflection ;
|
||||||
InflectionPN : PN -> Inflection ;
|
InflectionPN : PN -> Inflection ;
|
||||||
|
InflectionLN : LN -> Inflection ;
|
||||||
InflectionGN : GN -> Inflection ;
|
InflectionGN : GN -> Inflection ;
|
||||||
InflectionSN : SN -> Inflection ;
|
InflectionSN : SN -> Inflection ;
|
||||||
InflectionA : A -> Inflection ;
|
InflectionA : A -> Inflection ;
|
||||||
|
|||||||
@@ -27,9 +27,11 @@ abstract Extend = Cat ** {
|
|||||||
|
|
||||||
CompBareCN : CN -> Comp ; -- (is) teacher
|
CompBareCN : CN -> Comp ; -- (is) teacher
|
||||||
|
|
||||||
|
PiedPipingQuestSlash : IP -> ClSlash -> QCl ; -- with whom does John live
|
||||||
|
PiedPipingRelSlash : RP -> ClSlash -> RCl ; -- with whom John lives
|
||||||
StrandQuestSlash : IP -> ClSlash -> QCl ; -- whom does John live with
|
StrandQuestSlash : IP -> ClSlash -> QCl ; -- whom does John live with
|
||||||
StrandRelSlash : RP -> ClSlash -> RCl ; -- that he lives in
|
StrandRelSlash : RP -> ClSlash -> RCl ; -- that he lives with
|
||||||
EmptyRelSlash : ClSlash -> RCl ; -- he lives in
|
EmptyRelSlash : ClSlash -> RCl ; -- he lives with
|
||||||
|
|
||||||
|
|
||||||
-- $VP$ conjunction, separate categories for finite and infinitive forms (VPS and VPI, respectively)
|
-- $VP$ conjunction, separate categories for finite and infinitive forms (VPS and VPI, respectively)
|
||||||
@@ -291,13 +293,11 @@ fun UseDAP : DAP -> NP ;
|
|||||||
cat X ; -- for words that are difficult to classify, mainly for MorphoDict
|
cat X ; -- for words that are difficult to classify, mainly for MorphoDict
|
||||||
|
|
||||||
fun
|
fun
|
||||||
CardCNCard : Card -> CN -> Card ; -- three million, four lakh, six dozen etc
|
UseComp_estar : Comp -> VP ; -- esta lleno, as opposed to es lleno
|
||||||
|
UseComp_ser : Comp -> VP ; -- es lleno, as opposed to esta lleno
|
||||||
|
|
||||||
GivenName : GN -> PN ;
|
fun
|
||||||
MaleSurname : SN -> PN ;
|
CardCNCard : Card -> CN -> Card ; -- three million, four lakh, six dozen etc
|
||||||
FemaleSurname : SN -> PN ;
|
|
||||||
PlSurname : SN -> PN ;
|
|
||||||
FullName : GN -> SN -> PN ;
|
|
||||||
|
|
||||||
fun
|
fun
|
||||||
AnaphPron : NP -> Pron ;
|
AnaphPron : NP -> Pron ;
|
||||||
|
|||||||
@@ -19,6 +19,6 @@ abstract Grammar =
|
|||||||
Structural,
|
Structural,
|
||||||
Idiom,
|
Idiom,
|
||||||
Tense,
|
Tense,
|
||||||
|
Names,
|
||||||
Transfer
|
Transfer
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|||||||
14
src/abstract/Names.gf
Normal file
14
src/abstract/Names.gf
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
abstract Names = Cat ** {
|
||||||
|
|
||||||
|
fun GivenName : GN -> NP ;
|
||||||
|
MaleSurname : SN -> NP ;
|
||||||
|
FemaleSurname : SN -> NP ;
|
||||||
|
PlSurname : SN -> NP ;
|
||||||
|
FullName : GN -> SN -> NP ;
|
||||||
|
|
||||||
|
fun UseLN : LN -> NP ;
|
||||||
|
PlainLN : LN -> NP ;
|
||||||
|
InLN : LN -> Adv ;
|
||||||
|
AdjLN : AP -> LN -> LN ;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -58,6 +58,7 @@ abstract Noun = Cat ** {
|
|||||||
|
|
||||||
data
|
data
|
||||||
NumDigits : Digits -> Card ; -- 51
|
NumDigits : Digits -> Card ; -- 51
|
||||||
|
NumDecimal : Decimal -> Card ; -- 3.14, -1, etc
|
||||||
NumNumeral : Numeral -> Card ; -- fifty-one
|
NumNumeral : Numeral -> Card ; -- fifty-one
|
||||||
|
|
||||||
-- The construction of numerals is defined in [Numeral Numeral.html].
|
-- The construction of numerals is defined in [Numeral Numeral.html].
|
||||||
@@ -155,4 +156,8 @@ abstract Noun = Cat ** {
|
|||||||
AdjDAP : DAP -> AP -> DAP ; -- the large (one)
|
AdjDAP : DAP -> AP -> DAP ; -- the large (one)
|
||||||
DetDAP : Det -> DAP ; -- this (or that)
|
DetDAP : Det -> DAP ; -- this (or that)
|
||||||
|
|
||||||
|
--2 Quantities
|
||||||
|
|
||||||
|
QuantityNP : Decimal -> MU -> NP ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
-- parts of a numeral, which is often incorrect - more work on
|
-- parts of a numeral, which is often incorrect - more work on
|
||||||
-- (un)lexing is needed to solve this problem.
|
-- (un)lexing is needed to solve this problem.
|
||||||
|
|
||||||
abstract Numeral = Cat [Numeral,Digits] ** {
|
abstract Numeral = Cat [Numeral,Digits,Decimal] ** {
|
||||||
|
|
||||||
cat
|
cat
|
||||||
Digit ; -- 2..9
|
Digit ; -- 2..9
|
||||||
@@ -53,18 +53,18 @@ data
|
|||||||
pot3 : Sub1000 -> Sub1000000 ; -- m * 1000
|
pot3 : Sub1000 -> Sub1000000 ; -- m * 1000
|
||||||
pot3plus : Sub1000 -> Sub1000 -> Sub1000000 ; -- m * 1000 + n
|
pot3plus : Sub1000 -> Sub1000 -> Sub1000000 ; -- m * 1000 + n
|
||||||
pot3as4 : Sub1000000 -> Sub1000000000 ; -- coercion of 1..999999
|
pot3as4 : Sub1000000 -> Sub1000000000 ; -- coercion of 1..999999
|
||||||
pot3float : Float -> Sub1000000 ; -- 3.5 thousand
|
pot3decimal : Decimal -> Sub1000000 ; -- 3.5 thousand
|
||||||
|
|
||||||
pot41 : Sub1000000000 ; -- a million instead of one million
|
pot41 : Sub1000000000 ; -- a million instead of one million
|
||||||
pot4 : Sub1000 -> Sub1000000000 ; -- m * 1000000000
|
pot4 : Sub1000 -> Sub1000000000 ; -- m * 1000000000
|
||||||
pot4plus : Sub1000 -> Sub1000000 -> Sub1000000000 ; -- m * 1000000000 + n
|
pot4plus : Sub1000 -> Sub1000000 -> Sub1000000000 ; -- m * 1000000000 + n
|
||||||
pot4as5 : Sub1000000000 -> Sub1000000000000 ; -- coercion of 1..999999999
|
pot4as5 : Sub1000000000 -> Sub1000000000000 ; -- coercion of 1..999999999
|
||||||
pot4float : Float -> Sub1000000000 ; -- 3.5 million
|
pot4decimal : Decimal -> Sub1000000000 ; -- 3.5 million
|
||||||
|
|
||||||
pot51 : Sub1000000000000 ; -- a billion instead of one billion
|
pot51 : Sub1000000000000 ; -- a billion instead of one billion
|
||||||
pot5 : Sub1000 -> Sub1000000000000 ; -- m * 1000000000
|
pot5 : Sub1000 -> Sub1000000000000 ; -- m * 1000000000
|
||||||
pot5plus : Sub1000 -> Sub1000000000 -> Sub1000000000000 ; -- m * 1000000000 + n
|
pot5plus : Sub1000 -> Sub1000000000 -> Sub1000000000000 ; -- m * 1000000000 + n
|
||||||
pot5float : Float -> Sub1000000000000 ; -- 3.5 billion
|
pot5decimal : Decimal -> Sub1000000000000 ; -- 3.5 billion
|
||||||
|
|
||||||
-- Numerals as sequences of digits have a separate, simpler grammar
|
-- Numerals as sequences of digits have a separate, simpler grammar
|
||||||
|
|
||||||
@@ -77,4 +77,8 @@ data
|
|||||||
|
|
||||||
D_0, D_1, D_2, D_3, D_4, D_5, D_6, D_7, D_8, D_9 : Dig ;
|
D_0, D_1, D_2, D_3, D_4, D_5, D_6, D_7, D_8, D_9 : Dig ;
|
||||||
|
|
||||||
|
PosDecimal : Digits -> Decimal ; -- 8
|
||||||
|
NegDecimal : Digits -> Decimal ; -- -8
|
||||||
|
IFrac : Decimal -> Dig -> Decimal ; -- 3.14 -> 3.141
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -62,6 +62,7 @@ concrete CatAfr of Cat =
|
|||||||
|
|
||||||
Numeral = {s : CardOrd => Str ; n : Number } ;
|
Numeral = {s : CardOrd => Str ; n : Number } ;
|
||||||
Digits = {s : CardOrd => Str ; n : Number } ;
|
Digits = {s : CardOrd => Str ; n : Number } ;
|
||||||
|
Decimal = {s : CardOrd => Str ; n : Number ; hasDot : Bool} ;
|
||||||
|
|
||||||
-- Structural
|
-- Structural
|
||||||
|
|
||||||
@@ -83,6 +84,9 @@ concrete CatAfr of Cat =
|
|||||||
N = Noun ;
|
N = Noun ;
|
||||||
N2 = {s : NForm => Str ; g : Gender} ** {c2 : Preposition} ;
|
N2 = {s : NForm => Str ; g : Gender} ** {c2 : Preposition} ;
|
||||||
N3 = {s : NForm => Str ; g : Gender} ** {c2,c3 : Preposition} ;
|
N3 = {s : NForm => Str ; g : Gender} ** {c2,c3 : Preposition} ;
|
||||||
GN, SN, PN = {s : NPCase => Str} ;
|
PN = {s : NPCase => Str} ;
|
||||||
|
GN = {s : NPCase => Str; g : Sex} ;
|
||||||
|
SN = {s : Sex => NPCase => Str; pl : NPCase => Str} ;
|
||||||
|
LN = {s : Adjf => NPCase => Str ; hasArt : Bool ; n : Number} ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,6 +28,12 @@ lin
|
|||||||
s2 = paragraph (pn.s ! NPNom)
|
s2 = paragraph (pn.s ! NPNom)
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
InflectionLN = \ln -> {
|
||||||
|
t = "pn" ;
|
||||||
|
s1 = heading1 "Naam" ;
|
||||||
|
s2 = paragraph (ln.s ! Strong ! NPNom)
|
||||||
|
} ;
|
||||||
|
|
||||||
InflectionGN = \pn -> {
|
InflectionGN = \pn -> {
|
||||||
t = "vnm" ;
|
t = "vnm" ;
|
||||||
s1 = heading1 "Voornaam" ;
|
s1 = heading1 "Voornaam" ;
|
||||||
@@ -37,7 +43,7 @@ lin
|
|||||||
InflectionSN = \pn -> {
|
InflectionSN = \pn -> {
|
||||||
t = "van" ;
|
t = "van" ;
|
||||||
s1 = heading1 "Van" ;
|
s1 = heading1 "Van" ;
|
||||||
s2 = paragraph (pn.s ! NPNom)
|
s2 = paragraph (pn.s ! Male ! NPNom)
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
InflectionA, InflectionA2 = \adj ->
|
InflectionA, InflectionA2 = \adj ->
|
||||||
|
|||||||
@@ -1,14 +1,15 @@
|
|||||||
concrete ExtendAfr of Extend =
|
concrete ExtendAfr of Extend =
|
||||||
CatAfr ** ExtendFunctor
|
CatAfr ** ExtendFunctor - [PassVPSlash,PassAgentVPSlash]
|
||||||
with
|
with
|
||||||
(Grammar = GrammarAfr) **
|
(Grammar = GrammarAfr) **
|
||||||
|
|
||||||
open
|
open
|
||||||
ResAfr in {
|
ParadigmsAfr, ResAfr in {
|
||||||
|
|
||||||
lin GivenName, MaleSurname, FemaleSurname = \n -> n ;
|
-- KA: guessed from PassV2 in Afrikaans and the equivalents in Dutch
|
||||||
lin FullName gn sn = {
|
lin PassVPSlash vps =
|
||||||
s = \\c => gn.s ! NPNom ++ sn.s ! c ;
|
insertInf (vps.s.s ! VPerf) (predV word_V) ;
|
||||||
} ;
|
PassAgentVPSlash vps np =
|
||||||
|
insertAdv (appPrep "door" np.s) (insertInf (vps.s.s ! VPerf) (predV word_V)) ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,4 +14,5 @@ concrete GrammarAfr of Grammar =
|
|||||||
TextX,
|
TextX,
|
||||||
IdiomAfr,
|
IdiomAfr,
|
||||||
StructuralAfr,
|
StructuralAfr,
|
||||||
TenseX ;
|
TenseX,
|
||||||
|
NamesAfr ;
|
||||||
|
|||||||
40
src/afrikaans/NamesAfr.gf
Normal file
40
src/afrikaans/NamesAfr.gf
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
concrete NamesAfr of Names = CatAfr ** open ResAfr, Prelude in {
|
||||||
|
|
||||||
|
lin GivenName = \n -> {s = n.s ; a = agrP3 Sg ; isPron = False} ;
|
||||||
|
lin MaleSurname = \n -> {s = n.s ! Male ; a = agrP3 Sg ; isPron = False} ;
|
||||||
|
lin FemaleSurname = \n -> {s = n.s ! Female; a = agrP3 Sg ; isPron = False} ;
|
||||||
|
lin PlSurname = \n -> {s = n.pl ; a = agrP3 Sg ; isPron = False} ;
|
||||||
|
|
||||||
|
lin FullName gn sn =
|
||||||
|
{s = \\c => gn.s ! NPNom ++ sn.s ! gn.g ! c ; a = agrP3 Sg ; isPron = False} ;
|
||||||
|
|
||||||
|
lin UseLN ln = {
|
||||||
|
s = \\c => case ln.hasArt of {
|
||||||
|
True => "die" ++ ln.s ! Weak ! c ;
|
||||||
|
False => ln.s ! Strong ! c
|
||||||
|
} ;
|
||||||
|
a = agrP3 ln.n ;
|
||||||
|
isPron = False
|
||||||
|
} ;
|
||||||
|
|
||||||
|
PlainLN ln = {
|
||||||
|
s = \\c => ln.s ! Strong ! c ;
|
||||||
|
a = agrP3 ln.n ;
|
||||||
|
isPron = False
|
||||||
|
} ;
|
||||||
|
|
||||||
|
InLN ln = {
|
||||||
|
s = appPrep "in" (\\c => case ln.hasArt of {
|
||||||
|
True => "die" ++ ln.s ! Weak ! c ;
|
||||||
|
False => ln.s ! Strong ! c
|
||||||
|
})
|
||||||
|
} ;
|
||||||
|
|
||||||
|
AdjLN ap ln = ln ** {
|
||||||
|
s = \\a,c =>
|
||||||
|
preOrPost ap.isPre
|
||||||
|
(ap.s ! agrAdj Neutr a (NF ln.n Nom))
|
||||||
|
(ln.s ! a ! c) ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -77,6 +77,8 @@ concrete NounAfr of Noun = CatAfr ** open ResAfr, Prelude in {
|
|||||||
NumDigits numeral = {s = \\g,c => numeral.s ! NCard g c; n = numeral.n } ;
|
NumDigits numeral = {s = \\g,c => numeral.s ! NCard g c; n = numeral.n } ;
|
||||||
OrdDigits numeral = {s = \\af => numeral.s ! NOrd af} ;
|
OrdDigits numeral = {s = \\af => numeral.s ! NOrd af} ;
|
||||||
|
|
||||||
|
NumDecimal dec = {s = \\g,c => dec.s ! NCard g c; n = dec.n } ;
|
||||||
|
|
||||||
NumNumeral numeral = {s = \\g,c => numeral.s ! NCard g c; n = numeral.n } ;
|
NumNumeral numeral = {s = \\g,c => numeral.s ! NCard g c; n = numeral.n } ;
|
||||||
OrdNumeral numeral = {s = \\af => numeral.s ! NOrd af} ;
|
OrdNumeral numeral = {s = \\af => numeral.s ! NOrd af} ;
|
||||||
|
|
||||||
@@ -177,4 +179,10 @@ concrete NounAfr of Noun = CatAfr ** open ResAfr, Prelude in {
|
|||||||
isMod = cn.isMod
|
isMod = cn.isMod
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
QuantityNP n m = {
|
||||||
|
s = \\c => preOrPost m.isPre m.s (n.s ! NCard Neutr Nom) ;
|
||||||
|
a = agrP3 n.n ;
|
||||||
|
isPron = False
|
||||||
|
} ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
concrete NumeralAfr of Numeral = CatAfr [Numeral,Digits] ** open ResAfr, Prelude in {
|
concrete NumeralAfr of Numeral = CatAfr [Numeral,Digits,Decimal] ** open ResAfr, Prelude in {
|
||||||
|
|
||||||
flags optimize = all_subs ;
|
flags optimize = all_subs ;
|
||||||
coding=utf8 ;
|
coding=utf8 ;
|
||||||
@@ -75,6 +75,20 @@ lin
|
|||||||
D_8 = mkDig "8" ;
|
D_8 = mkDig "8" ;
|
||||||
D_9 = mkDig "9" ;
|
D_9 = mkDig "9" ;
|
||||||
|
|
||||||
|
PosDecimal d = d ** {hasDot=False} ;
|
||||||
|
NegDecimal d = {
|
||||||
|
s = \\o => "-" ++ BIND ++ d.s ! o ;
|
||||||
|
n = Pl ;
|
||||||
|
hasDot=False
|
||||||
|
} ;
|
||||||
|
IFrac d i = {
|
||||||
|
s = \\o => d.s ! invNum ++
|
||||||
|
if_then_Str d.hasDot BIND (BIND++"."++BIND) ++
|
||||||
|
i.s ! o;
|
||||||
|
n = Pl ;
|
||||||
|
hasDot=True
|
||||||
|
} ;
|
||||||
|
|
||||||
oper
|
oper
|
||||||
mk2Dig : Str -> Str -> TDigit = \c,o -> mk3Dig c o Pl ;
|
mk2Dig : Str -> Str -> TDigit = \c,o -> mk3Dig c o Pl ;
|
||||||
mkDig : Str -> TDigit = \c -> mk2Dig c (c + "e") ;
|
mkDig : Str -> TDigit = \c -> mk2Dig c (c + "e") ;
|
||||||
|
|||||||
@@ -73,6 +73,25 @@ oper
|
|||||||
mkPN : Str -> PN ; -- proper name
|
mkPN : Str -> PN ; -- proper name
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
mkGN = overload { -- given name
|
||||||
|
mkGN : Str -> GN = \s -> lin GN {s = \\_ => s; g = Male} ;
|
||||||
|
mkGN : Str -> Sex -> GN = \s,g -> lin GN {s = \\_ => s; g = g} ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
mkSN = overload { -- given name
|
||||||
|
mkSN : Str -> SN = \s -> lin SN {s = \\_,_ => s; pl = \\_=>s} ;
|
||||||
|
mkSN : Str -> Str -> Str -> SN = \male,female,pl -> lin SN {s = table {Male=>\\_=>male; Female=>\\_=>female}; pl=\\_=>pl} ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
mkLN = overload {
|
||||||
|
mkLN : Str -> LN -- location name
|
||||||
|
= \s -> lin LN {s = \\_,_ => s; hasArt = False; n = Sg} ;
|
||||||
|
mkLN : Str -> Number -> LN -- location name
|
||||||
|
= \s,n -> lin LN {s = \\_,_ => s; hasArt = False; n = n} ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
defLN : LN -> LN = \n -> n ** {hasArt = True} ;
|
||||||
|
|
||||||
|
|
||||||
--2 Adjectives
|
--2 Adjectives
|
||||||
|
|
||||||
@@ -205,6 +224,8 @@ oper
|
|||||||
feminine = Neutr ;
|
feminine = Neutr ;
|
||||||
het,neuter = Neutr ;
|
het,neuter = Neutr ;
|
||||||
de,utrum = Neutr ;
|
de,utrum = Neutr ;
|
||||||
|
male = Male ;
|
||||||
|
female = Female ;
|
||||||
|
|
||||||
mkA = overload {
|
mkA = overload {
|
||||||
mkA : (vers : Str) -> A = \a -> lin A (regAdjective a) ;
|
mkA : (vers : Str) -> A = \a -> lin A (regAdjective a) ;
|
||||||
@@ -494,4 +515,6 @@ oper
|
|||||||
--
|
--
|
||||||
--}
|
--}
|
||||||
|
|
||||||
|
mkMU : Str -> MU = \s -> lin MU {s=s; isPre=False} ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ lincat
|
|||||||
Prep = ResAmh.Prep;
|
Prep = ResAmh.Prep;
|
||||||
Numeral = ResAmh.Numeral; --{s : CardOrd => Case => Str ; n : Number} ;
|
Numeral = ResAmh.Numeral; --{s : CardOrd => Case => Str ; n : Number} ;
|
||||||
Digits = ResAmh.Digits;--{s : CardOrd => Case => Str ; n : Number ; tail : DTail} ;
|
Digits = ResAmh.Digits;--{s : CardOrd => Case => Str ; n : Number ; tail : DTail} ;
|
||||||
|
Decimal = ResAmh.Decimal;
|
||||||
Ord = ResAmh.Ord ; --{ s : Case => Str } ;
|
Ord = ResAmh.Ord ; --{ s : Case => Str } ;
|
||||||
Num = ResAmh.Num;--{s : Case => Str ; n : Number ; hasCard : Bool} ;
|
Num = ResAmh.Num;--{s : Case => Str ; n : Number ; hasCard : Bool} ;
|
||||||
Card = ResAmh.Card;--{s : Case => Str ; n : Number} ;
|
Card = ResAmh.Card;--{s : Case => Str ; n : Number} ;
|
||||||
|
|||||||
@@ -94,6 +94,7 @@ lin
|
|||||||
NumCard n = {s = \\s,c => n.s!Masc!Sg!s!c ; n = Pl; hasCard = True} ;
|
NumCard n = {s = \\s,c => n.s!Masc!Sg!s!c ; n = Pl; hasCard = True} ;
|
||||||
|
|
||||||
NumDigits n = {s = n.s ! NCard } ;
|
NumDigits n = {s = n.s ! NCard } ;
|
||||||
|
NumDecimal n = {s = n.s ! NCard } ;
|
||||||
|
|
||||||
NumNumeral numeral = {s = numeral.s ! NCard} ;
|
NumNumeral numeral = {s = numeral.s ! NCard} ;
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
concrete NumeralAmh of Numeral = CatAmh [Numeral,Digits] ** open ResAmh,ParamX,Prelude in {
|
concrete NumeralAmh of Numeral = CatAmh [Numeral,Digits,Decimal] ** open ResAmh,ParamX,Prelude in {
|
||||||
flags coding = utf8;
|
flags coding = utf8;
|
||||||
lincat
|
lincat
|
||||||
|
|
||||||
@@ -91,6 +91,18 @@ lin pot3plus n m = {
|
|||||||
D_8 = mkDig "8" ;
|
D_8 = mkDig "8" ;
|
||||||
D_9 = mk2Dig "9" "9ኛ";
|
D_9 = mk2Dig "9" "9ኛ";
|
||||||
|
|
||||||
|
PosDecimal d = d ** {hasDot=False} ;
|
||||||
|
NegDecimal d = {
|
||||||
|
s = \\o,g,n,s,c => "-" ++ BIND ++ d.s !o!g!n!s!c ;
|
||||||
|
hasDot=False
|
||||||
|
} ;
|
||||||
|
IFrac d i = {
|
||||||
|
s = \\o,g,n,s,c => d.s!NCard!Masc!Sg!Indef!c ++
|
||||||
|
if_then_Str d.hasDot BIND (BIND++"."++BIND) ++
|
||||||
|
i.s ! o ! g ! n ! s ! c;
|
||||||
|
hasDot=True
|
||||||
|
} ;
|
||||||
|
|
||||||
oper
|
oper
|
||||||
commaIf : DTail -> Str = \t -> case t of {
|
commaIf : DTail -> Str = \t -> case t of {
|
||||||
T3 => BIND++","++BIND ;
|
T3 => BIND++","++BIND ;
|
||||||
|
|||||||
@@ -161,6 +161,10 @@ resource ResAmh = PatternsAmh** open Prelude,MorphoAmh,ParamX in {
|
|||||||
s : CardOrd=>Gender=>Number=>Species=>Case => Str ;
|
s : CardOrd=>Gender=>Number=>Species=>Case => Str ;
|
||||||
tail : DTail
|
tail : DTail
|
||||||
} ;
|
} ;
|
||||||
|
Decimal = {
|
||||||
|
s : CardOrd=>Gender=>Number=>Species=>Case => Str ;
|
||||||
|
hasDot : Bool
|
||||||
|
} ;
|
||||||
|
|
||||||
Ord = {s : Gender=>Number=>Species=>Case => Str} ;
|
Ord = {s : Gender=>Number=>Species=>Case => Str} ;
|
||||||
|
|
||||||
|
|||||||
@@ -90,6 +90,7 @@ concrete CatGrc of Cat = CommonX - [Temp,Tense] ** open ResGrc, Prelude in {
|
|||||||
|
|
||||||
Numeral = {s : CardOrd => Str ; n : Number} ;
|
Numeral = {s : CardOrd => Str ; n : Number} ;
|
||||||
Digits = {s : Str ; unit : Unit} ;
|
Digits = {s : Str ; unit : Unit} ;
|
||||||
|
Decimal = {s : Str ; unit : Unit ; hasDot : Bool} ;
|
||||||
|
|
||||||
-- Structural
|
-- Structural
|
||||||
|
|
||||||
|
|||||||
@@ -83,6 +83,8 @@ concrete NounGrc of Noun = CatGrc ** open Prelude, ResGrc, (M = MorphoGrc) in {
|
|||||||
-- TODO: check the following two:
|
-- TODO: check the following two:
|
||||||
NumDigits digits = let num : Number = case digits.unit of {one => Sg ; _ => Pl}
|
NumDigits digits = let num : Number = case digits.unit of {one => Sg ; _ => Pl}
|
||||||
in {s = \\g,c => digits.s ++ "'"; n = num ; isCard = True} ;
|
in {s = \\g,c => digits.s ++ "'"; n = num ; isCard = True} ;
|
||||||
|
NumDecimal digits = let num : Number = case digits.unit of {one => Sg ; _ => Pl}
|
||||||
|
in {s = \\g,c => digits.s ++ "'"; n = num ; isCard = True} ;
|
||||||
NumNumeral numeral = {s = \\g,c => numeral.s ! NCard g c; n = numeral.n } ;
|
NumNumeral numeral = {s = \\g,c => numeral.s ! NCard g c; n = numeral.n } ;
|
||||||
|
|
||||||
AdNum adn num = {s = \\g,c => adn.s ++ num.s ! g ! c ; n = num.n} ;
|
AdNum adn num = {s = \\g,c => adn.s ++ num.s ! g ! c ; n = num.n} ;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
--# -path=.:../abstract:../common:../prelude:
|
--# -path=.:../abstract:../common:../prelude:
|
||||||
|
|
||||||
concrete NumeralGrc of Numeral = CatGrc ** open ResGrc, MorphoGrc in {
|
concrete NumeralGrc of Numeral = CatGrc ** open ResGrc, MorphoGrc, Prelude in {
|
||||||
|
|
||||||
lincat
|
lincat
|
||||||
Digit = {s : DForm => CardOrd => Str} ;
|
Digit = {s : DForm => CardOrd => Str} ;
|
||||||
@@ -81,6 +81,8 @@ lin -- mkDigit d (d+10) (d*10) d-th d-times
|
|||||||
D_8 = mkDig "h" "p" "w" ;
|
D_8 = mkDig "h" "p" "w" ;
|
||||||
D_9 = mkDig "v" "K" "P" ; -- TODO: replace K by koppa, P by sampi (not in ut -ancientgreek)
|
D_9 = mkDig "v" "K" "P" ; -- TODO: replace K by koppa, P by sampi (not in ut -ancientgreek)
|
||||||
|
|
||||||
|
PosDecimal d = d ** {hasDot=False} ;
|
||||||
|
|
||||||
oper
|
oper
|
||||||
TDigit = {
|
TDigit = {
|
||||||
s : Unit => Str
|
s : Unit => Str
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
--# -path=.:alltenses:prelude
|
--# -path=../abstract:.:alltenses:prelude:
|
||||||
|
|
||||||
instance SyntaxGer of Syntax = ConstructorsGer, CatGer, StructuralGer, CombinatorsGer ;
|
instance SyntaxGer of Syntax = ConstructorsGer, CatGer, StructuralGer, CombinatorsGer ;
|
||||||
|
|
||||||
|
|||||||
@@ -67,6 +67,8 @@ concrete CatAra of Cat = CommonX - [Utt] ** open ResAra, Prelude, ParamX in {
|
|||||||
n : Size } ;
|
n : Size } ;
|
||||||
Digits = {s : Str;
|
Digits = {s : Str;
|
||||||
n : Size};
|
n : Size};
|
||||||
|
Decimal = {s : Str;
|
||||||
|
n : Size; hasDot : Bool};
|
||||||
|
|
||||||
-- Structural
|
-- Structural
|
||||||
|
|
||||||
|
|||||||
@@ -130,6 +130,10 @@ lin
|
|||||||
s = \\_,_,_ => digits.s ;
|
s = \\_,_,_ => digits.s ;
|
||||||
isNum = True
|
isNum = True
|
||||||
};
|
};
|
||||||
|
NumDecimal dec = dec ** {
|
||||||
|
s = \\_,_,_ => dec.s ;
|
||||||
|
isNum = True
|
||||||
|
};
|
||||||
|
|
||||||
NumNumeral numeral = numeral ** {
|
NumNumeral numeral = numeral ** {
|
||||||
s = numeral.s ! NCard ;
|
s = numeral.s ! NCard ;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
concrete NumeralAra of Numeral = CatAra [Numeral,Digits] **
|
concrete NumeralAra of Numeral = CatAra [Numeral,Digits,Decimal] **
|
||||||
open Predef, Prelude, ResAra, MorphoAra in {
|
open Predef, Prelude, ResAra, MorphoAra in {
|
||||||
|
|
||||||
flags coding=utf8 ;
|
flags coding=utf8 ;
|
||||||
@@ -136,6 +136,20 @@ lincat
|
|||||||
D_8 = mk1Dig "8" ;
|
D_8 = mk1Dig "8" ;
|
||||||
D_9 = mk1Dig "9" ;
|
D_9 = mk1Dig "9" ;
|
||||||
|
|
||||||
|
PosDecimal d = d ** {hasDot=False} ;
|
||||||
|
NegDecimal d = {
|
||||||
|
s = "-" ++ BIND ++ d.s;
|
||||||
|
n = ThreeTen ;
|
||||||
|
hasDot=False
|
||||||
|
} ;
|
||||||
|
IFrac d i = {
|
||||||
|
s = d.s ++
|
||||||
|
if_then_Str d.hasDot BIND (BIND++"."++BIND) ++
|
||||||
|
i.s ;
|
||||||
|
n = ThreeTen ;
|
||||||
|
hasDot=True
|
||||||
|
} ;
|
||||||
|
|
||||||
oper
|
oper
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -61,7 +61,8 @@ incomplete concrete CatBantu of Cat =
|
|||||||
|
|
||||||
Numeral = {s : CardOrd => Gender => Str ; n : Number} ;
|
Numeral = {s : CardOrd => Gender => Str ; n : Number} ;
|
||||||
|
|
||||||
Digits = {s : CardOrd => Gender => Str ; n : Number} ;
|
Digits = {s : CardOrd => Gender => Str ; n : Number} ;
|
||||||
|
Decimal = {s : CardOrd => Gender => Str ; n : Number ; hasDot : Bool} ;
|
||||||
|
|
||||||
-- Structural
|
-- Structural
|
||||||
|
|
||||||
@@ -81,7 +82,7 @@ incomplete concrete CatBantu of Cat =
|
|||||||
-- N2 = {s : Number => Case => Str ; g : Gender} ** {c2 : Str} ;
|
-- N2 = {s : Number => Case => Str ; g : Gender} ** {c2 : Str} ;
|
||||||
N2 = {s : Number => Case => Str ; g : Gender} ** {c2 : Prep} ;
|
N2 = {s : Number => Case => Str ; g : Gender} ** {c2 : Prep} ;
|
||||||
N3 = {s : Number => Case => Str ; g : Gender} ** {c2,c3 : Prep} ;
|
N3 = {s : Number => Case => Str ; g : Gender} ** {c2,c3 : Prep} ;
|
||||||
GN, SN, PN = {s : Case => Str ; g : Gender} ;
|
GN, SN, LN, PN = {s : Case => Str ; g : Gender} ;
|
||||||
--Tense = {s : Str ; t : ResKam.Tense} ;
|
--Tense = {s : Str ; t : ResKam.Tense} ;
|
||||||
|
|
||||||
linref
|
linref
|
||||||
|
|||||||
@@ -77,6 +77,7 @@ lin
|
|||||||
NumCard n = n ;--** {hasCard = True} ;
|
NumCard n = n ;--** {hasCard = True} ;
|
||||||
|
|
||||||
NumDigits n = {s = n.s ! NCard ; n = n.n} ;
|
NumDigits n = {s = n.s ! NCard ; n = n.n} ;
|
||||||
|
NumDecimal n = {s = n.s ! NCard ; n = n.n} ;
|
||||||
OrdDigits n = { s = n.s ! NOrd} ;
|
OrdDigits n = { s = n.s ! NOrd} ;
|
||||||
|
|
||||||
NumNumeral numeral = {s = numeral.s ! NCard; n = numeral.n} ;
|
NumNumeral numeral = {s = numeral.s ! NCard; n = numeral.n} ;
|
||||||
|
|||||||
@@ -85,6 +85,7 @@ concrete CatEus of Cat = CommonX ** open ResEus, Prelude in {
|
|||||||
|
|
||||||
Numeral = { s : Str ; n : Number } ;
|
Numeral = { s : Str ; n : Number } ;
|
||||||
Digits = { s : CardOrd => Str ; n : Number } ;
|
Digits = { s : CardOrd => Str ; n : Number } ;
|
||||||
|
Decimal = { s : CardOrd => Str ; n : Number ; hasDot : Bool} ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -125,6 +125,7 @@ concrete NounEus of Noun = CatEus ** open ResEus, Prelude in {
|
|||||||
|
|
||||||
-- : Digits -> Card ;
|
-- : Digits -> Card ;
|
||||||
NumDigits dig = { s = dig.s ! NCard ; n = dig.n } ;
|
NumDigits dig = { s = dig.s ! NCard ; n = dig.n } ;
|
||||||
|
NumDecimal dec = { s = dec.s ! NCard ; n = dec.n } ;
|
||||||
|
|
||||||
-- : Numeral -> Card ;
|
-- : Numeral -> Card ;
|
||||||
NumNumeral num = num ;
|
NumNumeral num = num ;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
concrete NumeralEus of Numeral = CatEus [Numeral,Digits] ** open Prelude, ResEus, ParamX in {
|
concrete NumeralEus of Numeral = CatEus [Numeral,Digits,Decimal] ** open Prelude, ResEus, ParamX in {
|
||||||
|
|
||||||
oper LinDigit : Type = { s : DForm => Str ;
|
oper LinDigit : Type = { s : DForm => Str ;
|
||||||
n : Number ;
|
n : Number ;
|
||||||
@@ -112,5 +112,18 @@ lin D_9 = mkDig "9" ;
|
|||||||
lin IDig dig = dig ;
|
lin IDig dig = dig ;
|
||||||
-- : Dig -> Digits -> Digits ;
|
-- : Dig -> Digits -> Digits ;
|
||||||
lin IIDig dig digs = digs ** {s = \\co => glue (dig.s ! co) (digs.s ! co) } ;
|
lin IIDig dig digs = digs ** {s = \\co => glue (dig.s ! co) (digs.s ! co) } ;
|
||||||
|
lin PosDecimal d = d ** {hasDot=False} ;
|
||||||
|
lin NegDecimal d = {
|
||||||
|
s = \\co => glue "-" (d.s ! co) ;
|
||||||
|
n = Pl ;
|
||||||
|
hasDot=False
|
||||||
|
} ;
|
||||||
|
lin IFrac d i = {
|
||||||
|
s = \\co => d.s ! co ++
|
||||||
|
if_then_Str d.hasDot BIND (BIND++"."++BIND) ++
|
||||||
|
i.s ! co ;
|
||||||
|
n = Pl ;
|
||||||
|
hasDot=False
|
||||||
|
} ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ concrete CatBul of Cat = CommonX - [IAdv,AdV] ** open ResBul, Prelude, Predef, (
|
|||||||
|
|
||||||
Numeral = {s : CardOrd => Str; n : Number} ;
|
Numeral = {s : CardOrd => Str; n : Number} ;
|
||||||
Digits = {s : CardOrd => Str; n : Number; tail : DTail} ;
|
Digits = {s : CardOrd => Str; n : Number; tail : DTail} ;
|
||||||
|
Decimal = {s : CardOrd => Str; n : Number; hasDot : Bool} ;
|
||||||
|
|
||||||
-- Structural
|
-- Structural
|
||||||
|
|
||||||
@@ -88,6 +89,7 @@ concrete CatBul of Cat = CommonX - [IAdv,AdV] ** open ResBul, Prelude, Predef, (
|
|||||||
N3 = {s : NForm => Str; rel : AForm => Str; relType : NRelType; g : AGender} ** {c2,c3 : Preposition} ;
|
N3 = {s : NForm => Str; rel : AForm => Str; relType : NRelType; g : AGender} ** {c2,c3 : Preposition} ;
|
||||||
GN = {s : Str; g : Sex} ;
|
GN = {s : Str; g : Sex} ;
|
||||||
SN = {s : Sex => Str; pl : Str} ;
|
SN = {s : Sex => Str; pl : Str} ;
|
||||||
|
LN = {s : Species => Str; onPrep : Bool; gn : GenNum} ;
|
||||||
PN = {s : Str; gn : GenNum} ;
|
PN = {s : Str; gn : GenNum} ;
|
||||||
|
|
||||||
lindef
|
lindef
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
--# -path=.:../abstract:../common
|
--# -path=.:../abstract:../common
|
||||||
concrete DocumentationBul of Documentation = CatBul ** open
|
concrete DocumentationBul of Documentation = CatBul ** open
|
||||||
ResBul,
|
ResBul, Prelude,
|
||||||
HTML in {
|
HTML in {
|
||||||
flags coding=utf8 ;
|
flags coding=utf8 ;
|
||||||
|
|
||||||
@@ -92,6 +92,25 @@ lin
|
|||||||
s3 = ""
|
s3 = ""
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
InflectionLN = \n -> {
|
||||||
|
t = "същ.с." ;
|
||||||
|
s1= heading1 ("Име за Място"++
|
||||||
|
case n.gn of {
|
||||||
|
GSg Masc => "(м.р.)" ;
|
||||||
|
GSg Fem => "(ж.р.)" ;
|
||||||
|
GSg Neut => "(ср.р.)" ;
|
||||||
|
GPl => "(мн.ч.)"
|
||||||
|
}) ;
|
||||||
|
s2 = paragraph (n.s ! Indef) ++
|
||||||
|
heading1 ("Наречие") ++
|
||||||
|
paragraph (case n.onPrep of {
|
||||||
|
True => linCase Dat Pos ;
|
||||||
|
False => vyv_Str
|
||||||
|
} ++
|
||||||
|
n.s ! Def) ;
|
||||||
|
s3 = ""
|
||||||
|
} ;
|
||||||
|
|
||||||
InflectionGN = \gn -> {
|
InflectionGN = \gn -> {
|
||||||
t = "същ.с.л." ;
|
t = "същ.с.л." ;
|
||||||
s1= heading1 (case gn.g of {
|
s1= heading1 (case gn.g of {
|
||||||
@@ -145,7 +164,7 @@ lin
|
|||||||
} ;
|
} ;
|
||||||
|
|
||||||
InflectionPrep = \prep -> {
|
InflectionPrep = \prep -> {
|
||||||
t = "пр" ;
|
t = "пред" ;
|
||||||
s1= heading1 ("Предлог") ;
|
s1= heading1 ("Предлог") ;
|
||||||
s2= paragraph (prep.s) ;
|
s2= paragraph (prep.s) ;
|
||||||
s3= ""
|
s3= ""
|
||||||
|
|||||||
@@ -300,26 +300,10 @@ lin UseDAP dap = {
|
|||||||
p = NounP3 dap.p
|
p = NounP3 dap.p
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
lin GivenName = \n -> {
|
lin UseComp_estar = UseComp ;
|
||||||
s = n.s ;
|
UseComp_ser = UseComp ;
|
||||||
gn = GSg (sex2gender n.g)
|
|
||||||
} ;
|
lin ProDrop pro = pro ;
|
||||||
lin MaleSurname = \n -> {
|
|
||||||
s = n.s ! Male ;
|
|
||||||
gn = GSg Masc
|
|
||||||
} ;
|
|
||||||
lin FemaleSurname = \n -> {
|
|
||||||
s = n.s ! Female;
|
|
||||||
gn = GSg Fem
|
|
||||||
} ;
|
|
||||||
lin PlSurname = \n -> {
|
|
||||||
s = n.pl ;
|
|
||||||
gn = GPl
|
|
||||||
} ;
|
|
||||||
lin FullName gn sn = {
|
|
||||||
s = gn.s ++ sn.s ! gn.g ;
|
|
||||||
gn = GSg (sex2gender gn.g)
|
|
||||||
} ;
|
|
||||||
|
|
||||||
lin AnaphPron np =
|
lin AnaphPron np =
|
||||||
case <np.gn, np.p> of {
|
case <np.gn, np.p> of {
|
||||||
|
|||||||
@@ -15,7 +15,8 @@ concrete GrammarBul of Grammar =
|
|||||||
TextBul,
|
TextBul,
|
||||||
StructuralBul,
|
StructuralBul,
|
||||||
IdiomBul,
|
IdiomBul,
|
||||||
TenseX - [CAdv,IAdv,AdV,SC]
|
TenseX - [CAdv,IAdv,AdV,SC],
|
||||||
|
NamesBul
|
||||||
** {
|
** {
|
||||||
flags coding=utf8 ;
|
flags coding=utf8 ;
|
||||||
|
|
||||||
|
|||||||
@@ -165,6 +165,7 @@ oper
|
|||||||
NF Sg Indef => sg ;
|
NF Sg Indef => sg ;
|
||||||
NF Sg Def => case sg of {
|
NF Sg Def => case sg of {
|
||||||
_+"а"=>sg+"та" ;
|
_+"а"=>sg+"та" ;
|
||||||
|
_+"ю"=>sg+"та" ;
|
||||||
_+"я"=>sg+"та" ;
|
_+"я"=>sg+"та" ;
|
||||||
_+"о"=>sg+"то" ;
|
_+"о"=>sg+"то" ;
|
||||||
_+"у"=>sg+"то" ;
|
_+"у"=>sg+"то" ;
|
||||||
|
|||||||
@@ -291,6 +291,17 @@ oper
|
|||||||
\s,gn -> {s = s; gn = gn ; lock_PN = <>} ;
|
\s,gn -> {s = s; gn = gn ; lock_PN = <>} ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
mkLN = overload {
|
||||||
|
mkLN : Str -> LN = \s -> lin LN {s = \\_ => s; onPrep = False; gn = GSg Masc} ;
|
||||||
|
mkLN : Str -> Gender -> LN =
|
||||||
|
\s,g -> lin LN {s = \\_ => s; onPrep = False; gn = GSg g} ;
|
||||||
|
mkLN : Str -> GenNum -> LN =
|
||||||
|
\s,gn -> lin LN {s = \\_ => s; onPrep = False; gn = gn} ;
|
||||||
|
mkLN : Str -> Str -> GenNum -> LN =
|
||||||
|
\s1,s2,gn -> lin LN {s = table Species [s2; s1]; onPrep = False; gn = gn} ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
onLN : LN -> LN = \n -> n ** {onPrep = True} ;
|
||||||
|
|
||||||
--2 IAdv
|
--2 IAdv
|
||||||
--
|
--
|
||||||
|
|||||||
62
src/bulgarian/NamesBul.gf
Normal file
62
src/bulgarian/NamesBul.gf
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
concrete NamesBul of Names = CatBul ** open ResBul, Prelude in {
|
||||||
|
|
||||||
|
lin GivenName = \n -> {
|
||||||
|
s = table { RObj c => linCase c Pos ++ n.s;
|
||||||
|
_ => n.s
|
||||||
|
} ;
|
||||||
|
gn = GSg (sex2gender n.g) ;
|
||||||
|
p = NounP3 Pos
|
||||||
|
} ;
|
||||||
|
lin MaleSurname = \n -> {
|
||||||
|
s = table { RObj c => linCase c Pos ++ n.s ! Male;
|
||||||
|
_ => n.s ! Male
|
||||||
|
} ;
|
||||||
|
gn = GSg Masc ;
|
||||||
|
p = NounP3 Pos
|
||||||
|
} ;
|
||||||
|
lin FemaleSurname = \n -> {
|
||||||
|
s = table { RObj c => linCase c Pos ++ n.s ! Female;
|
||||||
|
_ => n.s ! Female
|
||||||
|
} ;
|
||||||
|
gn = GSg Fem ;
|
||||||
|
p = NounP3 Pos
|
||||||
|
} ;
|
||||||
|
lin PlSurname = \n -> {
|
||||||
|
s = table { RObj c => linCase c Pos ++ n.pl ;
|
||||||
|
_ => n.pl
|
||||||
|
} ;
|
||||||
|
gn = GPl ;
|
||||||
|
p = NounP3 Pos
|
||||||
|
} ;
|
||||||
|
lin FullName gn sn = {
|
||||||
|
s = table { RObj c => linCase c Pos ++ gn.s ++ sn.s ! gn.g ;
|
||||||
|
_ => gn.s ++ sn.s ! gn.g
|
||||||
|
} ;
|
||||||
|
gn = GSg (sex2gender gn.g) ;
|
||||||
|
p = NounP3 Pos
|
||||||
|
} ;
|
||||||
|
|
||||||
|
lin UseLN, PlainLN = \n -> {
|
||||||
|
s = table { RObj c => linCase c Pos ++ n.s ! Def ;
|
||||||
|
_ => n.s ! Def
|
||||||
|
} ;
|
||||||
|
gn = n.gn ;
|
||||||
|
p = NounP3 Pos
|
||||||
|
} ;
|
||||||
|
|
||||||
|
InLN n = {
|
||||||
|
s = case n.onPrep of {
|
||||||
|
True => linCase Dat Pos ;
|
||||||
|
False => vyv_Str
|
||||||
|
} ++
|
||||||
|
n.s ! Def
|
||||||
|
} ;
|
||||||
|
|
||||||
|
AdjLN ap n = n ** {
|
||||||
|
s = \\sp => case ap.isPre of {
|
||||||
|
True => ap.s ! aform n.gn sp RSubj ! P3 ++ n.s ! Indef ;
|
||||||
|
False => n.s ! sp ++ ap.s ! aform n.gn sp RSubj ! P3
|
||||||
|
}
|
||||||
|
} ;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -116,6 +116,7 @@ concrete NounBul of Noun = CatBul ** open ResBul, Prelude in {
|
|||||||
NumCard n = {s=n.s; nn=n.nn; nonEmpty = True} ;
|
NumCard n = {s=n.s; nn=n.nn; nonEmpty = True} ;
|
||||||
|
|
||||||
NumDigits n = {s = \\gspec => n.s ! NCard gspec; nn = case n.n of {Sg => NNum Sg; Pl => NCountable}} ;
|
NumDigits n = {s = \\gspec => n.s ! NCard gspec; nn = case n.n of {Sg => NNum Sg; Pl => NCountable}} ;
|
||||||
|
NumDecimal n = {s = \\gspec => n.s ! NCard gspec; nn = case n.n of {Sg => NNum Sg; Pl => NCountable}} ;
|
||||||
OrdDigits n = {s = \\aform => n.s ! NOrd aform} ;
|
OrdDigits n = {s = \\aform => n.s ! NOrd aform} ;
|
||||||
|
|
||||||
NumNumeral numeral = {s = \\gspec => numeral.s ! NCard gspec; nn = case numeral.n of {Sg => NNum Sg; Pl => NCountable}} ;
|
NumNumeral numeral = {s = \\gspec => numeral.s ! NCard gspec; nn = case numeral.n of {Sg => NNum Sg; Pl => NCountable}} ;
|
||||||
@@ -238,4 +239,11 @@ concrete NounBul of Noun = CatBul ** open ResBul, Prelude in {
|
|||||||
p = dap.p
|
p = dap.p
|
||||||
} ;
|
} ;
|
||||||
DetDAP det = det ;
|
DetDAP det = det ;
|
||||||
|
|
||||||
|
QuantityNP n m = {
|
||||||
|
s = \\role => preOrPost m.isPre m.s (n.s ! NCard (CFMasc Indef NonHuman)) ;
|
||||||
|
gn = gennum (AMasc NonHuman) n.n ;
|
||||||
|
p = NounP3 Pos
|
||||||
|
} ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
--# -coding=utf8
|
--# -coding=utf8
|
||||||
concrete NumeralBul of Numeral = CatBul [Numeral,Digits] ** open Prelude, ResBul in {
|
concrete NumeralBul of Numeral = CatBul [Numeral,Digits,Decimal] ** open Prelude, ResBul in {
|
||||||
flags coding=utf8 ;
|
flags coding=utf8 ;
|
||||||
|
|
||||||
|
|
||||||
@@ -97,8 +97,11 @@ lin pot3plus n m = {
|
|||||||
n = Pl
|
n = Pl
|
||||||
} ;
|
} ;
|
||||||
lin pot3as4 n = n ;
|
lin pot3as4 n = n ;
|
||||||
lin pot3float f = {
|
lin pot3decimal d = {
|
||||||
s = \\c,nf => f.s ++ mkCardOrd100 "хиляди" "хилядите" "хиляден" ! c ;
|
s = \\c,nf => case d.n of {
|
||||||
|
Sg => mkCardOrd100 "хиляда" "хилядата" "хиляден" ! NCard (CFMasc Indef NonHuman) ;
|
||||||
|
Pl => d.s ! NCard (CFFem Indef) ++ mkCardOrd100 "хиляди" "хилядите" "хиляден" ! c
|
||||||
|
} ;
|
||||||
n = Pl
|
n = Pl
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
@@ -118,8 +121,17 @@ lin pot4plus n1 n2 = {
|
|||||||
n = Pl
|
n = Pl
|
||||||
} ;
|
} ;
|
||||||
lin pot4as5 n = n ;
|
lin pot4as5 n = n ;
|
||||||
lin pot4float f = {
|
lin pot4decimal d = {
|
||||||
s = \\c,nf => f.s ++ mkCardOrd100 "милиона" "милиона" "милионен" ! c ;
|
s = \\c,nf => case c of {
|
||||||
|
NCard (CFMasc s a) => d.s ! NCard (CFMasc s NonHuman) ;
|
||||||
|
NCard (CFMascDefNom a) => d.s ! NCard (CFMascDefNom NonHuman) ;
|
||||||
|
NCard cf => d.s ! NCard cf ;
|
||||||
|
NOrd _ => d.s ! NCard (CFMasc Indef NonHuman)
|
||||||
|
} ++
|
||||||
|
case d.n of {
|
||||||
|
Sg => "милион" ;
|
||||||
|
Pl => "милиона"
|
||||||
|
} ;
|
||||||
n = Pl
|
n = Pl
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
@@ -138,8 +150,12 @@ lin pot5plus n1 n2 = {
|
|||||||
s = \\o,f => (pot5 n1).s ! o ! f ++ "и" ++ n2.s ! o ! f;
|
s = \\o,f => (pot5 n1).s ! o ! f ++ "и" ++ n2.s ! o ! f;
|
||||||
n = Pl
|
n = Pl
|
||||||
} ;
|
} ;
|
||||||
lin pot5float f = {
|
lin pot5decimal d = {
|
||||||
s = \\c,nf => f.s ++ mkCardOrd100 "милиярда" "милиярда" "милиярден" ! c ;
|
s = \\c,nf => d.s ! NCard (CFFem Indef) ++
|
||||||
|
case d.n of {
|
||||||
|
Sg => mkCardOrd100 "милиярд" "милиярда" "милиярден" ! c ;
|
||||||
|
Pl => mkCardOrd100 "милиярди" "милиярдите" "милиярден" ! c
|
||||||
|
} ;
|
||||||
n = Pl
|
n = Pl
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
@@ -168,6 +184,16 @@ lin pot5float f = {
|
|||||||
D_8 = mk3Dig "8" "8на" "8ми" Pl ;
|
D_8 = mk3Dig "8" "8на" "8ми" Pl ;
|
||||||
D_9 = mk3Dig "9" "9има" "9ти" Pl ;
|
D_9 = mk3Dig "9" "9има" "9ти" Pl ;
|
||||||
|
|
||||||
|
PosDecimal d = d ** {hasDot=False} ;
|
||||||
|
NegDecimal d = {s=\\o=>"-" ++ BIND ++ d.s ! o; hasDot=False; n = Pl} ;
|
||||||
|
IFrac d i = {
|
||||||
|
s = \\o => d.s ! NCard (CFMasc Indef NonHuman) ++
|
||||||
|
if_then_Str d.hasDot BIND (BIND++"."++BIND) ++
|
||||||
|
i.s ! o;
|
||||||
|
n = Pl ;
|
||||||
|
hasDot=True
|
||||||
|
} ;
|
||||||
|
|
||||||
oper
|
oper
|
||||||
spaceIf : DTail -> Str = \t -> case t of {
|
spaceIf : DTail -> Str = \t -> case t of {
|
||||||
T3 => SOFT_BIND ;
|
T3 => SOFT_BIND ;
|
||||||
|
|||||||
@@ -2116,4 +2116,7 @@ oper
|
|||||||
|
|
||||||
adjAdv : A -> Str -> A =
|
adjAdv : A -> Str -> A =
|
||||||
\a,adv -> a ** {adv = adv} ;
|
\a,adv -> a ** {adv = adv} ;
|
||||||
|
|
||||||
|
mkMU : Str -> MU = \s -> lin MU {s=s; isPre=False} ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,7 +47,6 @@ resource ResBul = ParamX ** open Prelude, Predef in {
|
|||||||
|
|
||||||
param
|
param
|
||||||
Gender = Masc | Fem | Neut ;
|
Gender = Masc | Fem | Neut ;
|
||||||
Sex = Male | Female ;
|
|
||||||
|
|
||||||
Species = Indef | Def ;
|
Species = Indef | Def ;
|
||||||
|
|
||||||
@@ -859,4 +858,9 @@ resource ResBul = ParamX ** open Prelude, Predef in {
|
|||||||
Female => Fem
|
Female => Fem
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
vyv_Str : Str
|
||||||
|
= pre { "в" ;
|
||||||
|
"във" / strs {"в" ; "ф" ; "В" ; "Ф"}
|
||||||
|
} ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,9 +44,7 @@ concrete StructuralBul of Structural = CatBul **
|
|||||||
if_Subj = ss "ако" ;
|
if_Subj = ss "ако" ;
|
||||||
in8front_Prep = mkPrep "пред" ;
|
in8front_Prep = mkPrep "пред" ;
|
||||||
i_Pron = mkPron "аз" "мой" "моя" "моят" "моя" "моята" "мое" "моето" "мои" "моите" (GSg Masc) PronP1 ;
|
i_Pron = mkPron "аз" "мой" "моя" "моят" "моя" "моята" "мое" "моето" "мои" "моите" (GSg Masc) PronP1 ;
|
||||||
in_Prep = mkPrep (pre { "в" ;
|
in_Prep = mkPrep vyv_Str ;
|
||||||
"във" / strs {"в" ; "ф" ; "В" ; "Ф"}
|
|
||||||
}) ;
|
|
||||||
it_Pron = mkPron "то" "негов" "неговия" "неговият" "негова" "неговата" "негово" "неговото" "негови" "неговите" (GSg Neut) PronP3 ;
|
it_Pron = mkPron "то" "негов" "неговия" "неговият" "негова" "неговата" "негово" "неговото" "негови" "неговите" (GSg Neut) PronP3 ;
|
||||||
less_CAdv = X.mkCAdv "по-малко" "от" ;
|
less_CAdv = X.mkCAdv "по-малко" "от" ;
|
||||||
many_Det = mkDeterminerPl "много" ;
|
many_Det = mkDeterminerPl "много" ;
|
||||||
|
|||||||
@@ -225,4 +225,7 @@ oper
|
|||||||
|
|
||||||
polNegDirSubj = RPos ;
|
polNegDirSubj = RPos ;
|
||||||
|
|
||||||
|
param
|
||||||
|
HasArt = NoArt | UseArt ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,6 +40,42 @@ lin
|
|||||||
)
|
)
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
InflectionGN = \gn -> {
|
||||||
|
t = "pn" ;
|
||||||
|
s1 = heading1 ("Prenom" ++
|
||||||
|
case gn.g of {
|
||||||
|
Masc => "("+heading masculine_Parameter+")" ;
|
||||||
|
Fem => "("+heading feminine_Parameter+")"
|
||||||
|
}) ;
|
||||||
|
s2 = gn.s
|
||||||
|
} ;
|
||||||
|
|
||||||
|
InflectionSN = \gn -> {
|
||||||
|
t = "pn" ;
|
||||||
|
s1 = heading1 "Família" ;
|
||||||
|
s2 = gn.s ! Masc
|
||||||
|
} ;
|
||||||
|
|
||||||
|
InflectionPN = \pn -> {
|
||||||
|
t = "pn" ;
|
||||||
|
s1 = heading1 ("Nom Propi" ++
|
||||||
|
case pn.g of {
|
||||||
|
Masc => "("+heading masculine_Parameter+")" ;
|
||||||
|
Fem => "("+heading feminine_Parameter+")"
|
||||||
|
}) ;
|
||||||
|
s2 = pn.s
|
||||||
|
} ;
|
||||||
|
|
||||||
|
InflectionLN = \ln -> {
|
||||||
|
t = "nl" ;
|
||||||
|
s1 = heading1 ("Nom de la Ubicació" ++
|
||||||
|
case ln.g of {
|
||||||
|
Masc => "("+heading masculine_Parameter+")" ;
|
||||||
|
Fem => "("+heading feminine_Parameter+")"
|
||||||
|
}) ;
|
||||||
|
s2 = paragraph ln.s
|
||||||
|
} ;
|
||||||
|
|
||||||
InflectionA, InflectionA2 = \adj -> {
|
InflectionA, InflectionA2 = \adj -> {
|
||||||
t = "a" ;
|
t = "a" ;
|
||||||
s1 = heading1 (nounHeading adjective_Category).s ;
|
s1 = heading1 (nounHeading adjective_Category).s ;
|
||||||
|
|||||||
@@ -15,10 +15,4 @@ concrete ExtendCat of Extend = CatCat ** ExtendRomanceFunctor-- -
|
|||||||
ParadigmsCat in {
|
ParadigmsCat in {
|
||||||
-- put your own definitions here
|
-- put your own definitions here
|
||||||
|
|
||||||
lin GivenName, MaleSurname, FemaleSurname = \n -> n ;
|
|
||||||
lin FullName gn sn = {
|
|
||||||
s = gn.s ++ sn.s ;
|
|
||||||
g = gn.g
|
|
||||||
} ;
|
|
||||||
|
|
||||||
} ;
|
} ;
|
||||||
|
|||||||
@@ -14,7 +14,8 @@ concrete GrammarCat of Grammar =
|
|||||||
TextX - [SC,Temp,Tense,Pol,PPos,PNeg],
|
TextX - [SC,Temp,Tense,Pol,PPos,PNeg],
|
||||||
IdiomCat,
|
IdiomCat,
|
||||||
StructuralCat,
|
StructuralCat,
|
||||||
TenseCat
|
TenseCat,
|
||||||
|
NamesCat
|
||||||
|
|
||||||
** {
|
** {
|
||||||
|
|
||||||
|
|||||||
41
src/catalan/NamesCat.gf
Normal file
41
src/catalan/NamesCat.gf
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
concrete NamesCat of Names = CatCat ** open ResCat, CommonRomance, Prelude in {
|
||||||
|
|
||||||
|
lin GivenName = \n -> pn2np n ;
|
||||||
|
lin MaleSurname = \n -> pn2np {s = n.s ! Masc; g = Masc} ;
|
||||||
|
lin FemaleSurname = \n -> pn2np {s = n.s ! Fem; g = Fem} ;
|
||||||
|
lin PlSurname = \n -> heavyNPpol False {
|
||||||
|
s = \\c => prepCase c ++ n.pl ;
|
||||||
|
a = agrP3 Masc Pl
|
||||||
|
} ;
|
||||||
|
lin FullName gn sn = pn2np {
|
||||||
|
s = gn.s ++ sn.s ! gn.g ;
|
||||||
|
g = gn.g
|
||||||
|
} ;
|
||||||
|
|
||||||
|
lin PlainLN n = heavyNP {
|
||||||
|
s = \\c => n.s;
|
||||||
|
a = {g = n.g ; n = n.num ; p = P3}
|
||||||
|
} ;
|
||||||
|
|
||||||
|
lin UseLN n = heavyNP {
|
||||||
|
s = \\c => case n.art of {
|
||||||
|
UseArt => artDef True n.g n.num c ++ n.s ;
|
||||||
|
_ => n.s
|
||||||
|
} ;
|
||||||
|
a = {g = n.g ; n = n.num ; p = P3}
|
||||||
|
} ;
|
||||||
|
|
||||||
|
|
||||||
|
lin InLN n = {
|
||||||
|
s = "en" ++ case n.art of {
|
||||||
|
UseArt => artDef True n.g n.num Acc ++ n.s;
|
||||||
|
_ => prepCase Acc ++ n.s
|
||||||
|
} ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
|
||||||
|
lin AdjLN ap n = n ** {
|
||||||
|
s = preOrPost ap.isPre (ap.s ! AF n.g n.num) n.s ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
concrete NumeralCat of Numeral = CatCat [Numeral,Digits] **
|
concrete NumeralCat of Numeral = CatCat [Numeral,Digits,Decimal] **
|
||||||
open CommonRomance, ResRomance, MorphoCat, Prelude in {
|
open CommonRomance, ResRomance, MorphoCat, Prelude in {
|
||||||
|
|
||||||
flags coding=utf8 ;
|
flags coding=utf8 ;
|
||||||
@@ -158,6 +158,20 @@ param
|
|||||||
D_8 = mkDig "8" ;
|
D_8 = mkDig "8" ;
|
||||||
D_9 = mkDig "9" ;
|
D_9 = mkDig "9" ;
|
||||||
|
|
||||||
|
PosDecimal d = d ** {hasDot=False} ;
|
||||||
|
NegDecimal d = {
|
||||||
|
s = \\o => "-" ++ BIND ++ d.s ! o ;
|
||||||
|
n = Pl ;
|
||||||
|
hasDot=False
|
||||||
|
} ;
|
||||||
|
IFrac d i = {
|
||||||
|
s = \\o => d.s ! NCard Masc ++
|
||||||
|
if_then_Str d.hasDot BIND (BIND++"."++BIND) ++
|
||||||
|
i.s ! o ;
|
||||||
|
n = Pl ;
|
||||||
|
hasDot=True
|
||||||
|
} ;
|
||||||
|
|
||||||
oper
|
oper
|
||||||
mk2Dig : Str -> Str -> TDigit = \c,o -> mk3Dig c o Pl ;
|
mk2Dig : Str -> Str -> TDigit = \c,o -> mk3Dig c o Pl ;
|
||||||
mkDig : Str -> TDigit = \c -> mk2Dig c (c + ":o") ;
|
mkDig : Str -> TDigit = \c -> mk2Dig c (c + ":o") ;
|
||||||
|
|||||||
@@ -139,6 +139,39 @@ oper
|
|||||||
mkPN : N -> PN ;
|
mkPN : N -> PN ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
mkGN = overload {
|
||||||
|
mkGN : (Anna : Str) -> GN = \s -> lin GN (regPN s) ; -- feminine for "-a", otherwise masculine
|
||||||
|
mkGN : (Pilar : Str) -> Gender -> GN = \s,g -> lin GN (mk2PN s g) ; -- force gender
|
||||||
|
} ;
|
||||||
|
|
||||||
|
mkSN = overload {
|
||||||
|
mkSN : Str -> SN = \s -> lin SN {s = \\_ => s; pl = s} ;
|
||||||
|
mkSN : Str -> Str -> Str -> SN = \male,female,pl -> lin SN {s = table {Masc=>male; Fem=>female}; pl = pl} ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
mkLN = overload {
|
||||||
|
mkLN : Str -> LN = \s ->
|
||||||
|
lin LN {s = s ;
|
||||||
|
onPrep=False ;
|
||||||
|
art = NoArt ;
|
||||||
|
g = Masc ;
|
||||||
|
num = Sg} ;
|
||||||
|
mkLN : Str -> Gender -> LN = \s,g ->
|
||||||
|
lin LN {s = s ;
|
||||||
|
onPrep=False ;
|
||||||
|
art = NoArt ;
|
||||||
|
g = g ;
|
||||||
|
num = Sg} ;
|
||||||
|
mkLN : Str -> Gender -> Number -> LN = \s,g,n ->
|
||||||
|
lin LN {s = s ;
|
||||||
|
onPrep=False ;
|
||||||
|
art = NoArt ;
|
||||||
|
g = g ;
|
||||||
|
num = n}
|
||||||
|
} ;
|
||||||
|
|
||||||
|
defLN : LN -> LN = \n -> n ** {art = UseArt} ;
|
||||||
|
|
||||||
|
|
||||||
--2 Adjectives
|
--2 Adjectives
|
||||||
|
|
||||||
@@ -302,6 +335,8 @@ oper
|
|||||||
CopulaType = DiffCat.CopulaType ;
|
CopulaType = DiffCat.CopulaType ;
|
||||||
masculine = Masc ;
|
masculine = Masc ;
|
||||||
feminine = Fem ;
|
feminine = Fem ;
|
||||||
|
male = Masc ;
|
||||||
|
female = Fem ;
|
||||||
singular = Sg ;
|
singular = Sg ;
|
||||||
plural = Pl ;
|
plural = Pl ;
|
||||||
serCopula = DiffCat.serCopula ;
|
serCopula = DiffCat.serCopula ;
|
||||||
@@ -553,6 +588,6 @@ oper
|
|||||||
mk2V2 : V -> Prep -> V2 ;
|
mk2V2 : V -> Prep -> V2 ;
|
||||||
dirV2 : V -> V2 ;
|
dirV2 : V -> V2 ;
|
||||||
|
|
||||||
|
mkMU : Str -> MU = \s -> lin MU {s=s; isPre=False} ;
|
||||||
|
|
||||||
} ;
|
} ;
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ concrete AdjectiveChi of Adjective = CatChi ** open ResChi, Prelude in {
|
|||||||
PositA a = a ** {hasAdA = False} ;
|
PositA a = a ** {hasAdA = False} ;
|
||||||
|
|
||||||
ComparA a np = a ** {
|
ComparA a np = a ** {
|
||||||
s = table {_=> than_s ++ np.s ++ a.s!Attr};
|
s = table {_=> than_s ++ linNP np ++ a.s!Attr};
|
||||||
hasAdA = False
|
hasAdA = False
|
||||||
|
|
||||||
};
|
};
|
||||||
@@ -26,11 +26,11 @@ concrete AdjectiveChi of Adjective = CatChi ** open ResChi, Prelude in {
|
|||||||
};
|
};
|
||||||
|
|
||||||
CAdvAP ad ap np = ap ** {
|
CAdvAP ad ap np = ap ** {
|
||||||
s = table {adjPlace => ad.s ++ np.s ++ ad.p ++ ap.s!adjPlace}
|
s = table {adjPlace => ad.s ++ linNP np ++ ad.p ++ ap.s!adjPlace}
|
||||||
};
|
};
|
||||||
|
|
||||||
ComplA2 a np = a ** {
|
ComplA2 a np = a ** {
|
||||||
s= table { adjPlace => appPrep a.c2 np.s ++ a.s!adjPlace};
|
s= table { adjPlace => appPrep a.c2 (linNP np) ++ a.s!adjPlace};
|
||||||
hasAdA = False
|
hasAdA = False
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -4,9 +4,9 @@ concrete AdverbChi of Adverb = CatChi **
|
|||||||
lin
|
lin
|
||||||
PositAdvAdj a = {s = a.s!Attr ++ "地" ; advType = ATManner ; hasDe = False} ; ---- for all adjs?
|
PositAdvAdj a = {s = a.s!Attr ++ "地" ; advType = ATManner ; hasDe = False} ; ---- for all adjs?
|
||||||
|
|
||||||
PrepNP prep np = ss (appPrep prep np.s) ** {advType = prep.advType ; hasDe = prep.hasDe} ; --- should depend on np too ?
|
PrepNP prep np = ss (appPrep prep (linNP np)) ** {advType = prep.advType ; hasDe = prep.hasDe} ; --- should depend on np too ?
|
||||||
|
|
||||||
ComparAdvAdj cadv a np = ss (a.s!Attr ++ cadv.s ++ cadv.p ++ np.s) ** {advType = ATManner ; hasDe = False} ;
|
ComparAdvAdj cadv a np = ss (a.s!Attr ++ cadv.s ++ cadv.p ++ (linNP np)) ** {advType = ATManner ; hasDe = False} ;
|
||||||
|
|
||||||
ComparAdvAdjS cadv a s = ss (a.s!Attr ++ cadv.s ++ cadv.p ++ linS s) ** {advType = ATManner ; hasDe = False} ;
|
ComparAdvAdjS cadv a s = ss (a.s!Attr ++ cadv.s ++ cadv.p ++ linS s) ** {advType = ATManner ; hasDe = False} ;
|
||||||
|
|
||||||
|
|||||||
@@ -43,7 +43,8 @@ concrete CatChi of Cat = CommonX - [Tense, Temp, Ant, Adv] ** open ResChi, Prelu
|
|||||||
-- Noun
|
-- Noun
|
||||||
|
|
||||||
CN = ResChi.Noun ;
|
CN = ResChi.Noun ;
|
||||||
NP, Pron = ResChi.NP ;
|
NP = ResChi.NP ;
|
||||||
|
Pron = SS ;
|
||||||
Det = Determiner ;
|
Det = Determiner ;
|
||||||
Quant = Determiner ** {pl : Str} ;
|
Quant = Determiner ** {pl : Str} ;
|
||||||
Predet = {s : Str} ; ----
|
Predet = {s : Str} ; ----
|
||||||
@@ -56,6 +57,7 @@ concrete CatChi of Cat = CommonX - [Tense, Temp, Ant, Adv] ** open ResChi, Prelu
|
|||||||
|
|
||||||
Numeral = {s,p : Str} ;
|
Numeral = {s,p : Str} ;
|
||||||
Card, Digits = {s : Str} ;
|
Card, Digits = {s : Str} ;
|
||||||
|
Decimal = {s : Str ; hasDot : Bool} ;
|
||||||
|
|
||||||
-- Structural
|
-- Structural
|
||||||
|
|
||||||
@@ -79,7 +81,7 @@ concrete CatChi of Cat = CommonX - [Tense, Temp, Ant, Adv] ** open ResChi, Prelu
|
|||||||
N = ResChi.Noun ;
|
N = ResChi.Noun ;
|
||||||
N2 = ResChi.Noun ** {c2 : Preposition} ;
|
N2 = ResChi.Noun ** {c2 : Preposition} ;
|
||||||
N3 = ResChi.Noun ** {c2,c3 : Preposition} ;
|
N3 = ResChi.Noun ** {c2,c3 : Preposition} ;
|
||||||
GN, SN, PN = ResChi.NP ;
|
GN, SN, LN, PN = SS ;
|
||||||
|
|
||||||
-- overridden
|
-- overridden
|
||||||
|
|
||||||
@@ -91,4 +93,5 @@ linref
|
|||||||
S = linS ;
|
S = linS ;
|
||||||
Prep = linPrep ;
|
Prep = linPrep ;
|
||||||
VP = infVP ;
|
VP = infVP ;
|
||||||
|
NP = \np -> np.det ++ np.s ;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ concrete ConjunctionChi of Conjunction = CatChi ** open ResChi, Prelude, Coordin
|
|||||||
postJiu = ss.postJiu}
|
postJiu = ss.postJiu}
|
||||||
} ;
|
} ;
|
||||||
ConjAdv c as = conjunctDistrSS (c.s ! CSent) as ** {advType = as.advType ; hasDe = as.hasDe} ; ---- ??
|
ConjAdv c as = conjunctDistrSS (c.s ! CSent) as ** {advType = as.advType ; hasDe = as.hasDe} ; ---- ??
|
||||||
ConjNP c = conjunctDistrSS (c.s ! CPhr CNPhrase) ;
|
ConjNP c nps = conjunctDistrSS (c.s ! CPhr CNPhrase) nps ** {det = []} ;
|
||||||
ConjAP c as = conjunctDistrTable AdjPlace (c.s ! CPhr CAPhrase) as ** {monoSyl = notB as.monoSyl ; hasAdA = True} ; ---- add de iff as doesn't
|
ConjAP c as = conjunctDistrTable AdjPlace (c.s ! CPhr CAPhrase) as ** {monoSyl = notB as.monoSyl ; hasAdA = True} ; ---- add de iff as doesn't
|
||||||
ConjRS c = conjunctDistrSS (c.s ! CSent) ;
|
ConjRS c = conjunctDistrSS (c.s ! CSent) ;
|
||||||
ConjCN c ns = conjunctDistrSS (c.s ! CPhr CNPhrase) ns ** {c = ns.c} ;
|
ConjCN c ns = conjunctDistrSS (c.s ! CPhr CNPhrase) ns ** {c = ns.c} ;
|
||||||
@@ -28,8 +28,8 @@ concrete ConjunctionChi of Conjunction = CatChi ** open ResChi, Prelude, Coordin
|
|||||||
|
|
||||||
BaseAdv x y = twoSS x y ** {advType = x.advType ; hasDe = y.hasDe} ; ---- ??
|
BaseAdv x y = twoSS x y ** {advType = x.advType ; hasDe = y.hasDe} ; ---- ??
|
||||||
ConsAdv x xs = consrSS duncomma x xs ** {advType = x.advType ; hasDe = xs.hasDe} ; ---- ??
|
ConsAdv x xs = consrSS duncomma x xs ** {advType = x.advType ; hasDe = xs.hasDe} ; ---- ??
|
||||||
BaseNP = twoSS ;
|
BaseNP np1 np2 = twoSS (mergeNP np1) (mergeNP np2) ;
|
||||||
ConsNP = consrSS duncomma ;
|
ConsNP np nps = consrSS duncomma (mergeNP np) nps ;
|
||||||
BaseAP x y = twoTable AdjPlace x y ** {monoSyl = y.monoSyl} ;
|
BaseAP x y = twoTable AdjPlace x y ** {monoSyl = y.monoSyl} ;
|
||||||
ConsAP x xs = consrTable AdjPlace duncomma x xs ** {monoSyl = xs.monoSyl} ;
|
ConsAP x xs = consrTable AdjPlace duncomma x xs ** {monoSyl = xs.monoSyl} ;
|
||||||
BaseRS = twoSS ;
|
BaseRS = twoSS ;
|
||||||
@@ -46,5 +46,8 @@ concrete ConjunctionChi of Conjunction = CatChi ** open ResChi, Prelude, Coordin
|
|||||||
[RS] = {s1,s2 : Str} ;
|
[RS] = {s1,s2 : Str} ;
|
||||||
[CN] = {s1,s2 : Str ; c : Str} ;
|
[CN] = {s1,s2 : Str ; c : Str} ;
|
||||||
|
|
||||||
|
oper
|
||||||
|
mergeNP : ResChi.NP -> SS = \np -> ss (linNP np) ;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,8 +47,8 @@ lin
|
|||||||
monthYearAdv m y = lin Adv {s = y.s ++ "年" ++ m.s ; advType = timeAdvType ; hasDe = False} ;
|
monthYearAdv m y = lin Adv {s = y.s ++ "年" ++ m.s ; advType = timeAdvType ; hasDe = False} ;
|
||||||
dayMonthYearAdv d m y = lin Adv {s = y.s ++ "年" ++ m.s ++ d.s ++ "日" ; advType = timeAdvType ; hasDe = False} ;
|
dayMonthYearAdv d m y = lin Adv {s = y.s ++ "年" ++ m.s ++ d.s ++ "日" ; advType = timeAdvType ; hasDe = False} ;
|
||||||
|
|
||||||
intYear i = lin NP i ;
|
intYear i = lin NP (R.mkNP i.s) ;
|
||||||
intMonthday i = lin NP i ;
|
intMonthday i = lin NP (R.mkNP i.s) ;
|
||||||
|
|
||||||
lincat Language = N ;
|
lincat Language = N ;
|
||||||
|
|
||||||
|
|||||||
@@ -111,6 +111,30 @@ lin
|
|||||||
s2 = inflVerb verb
|
s2 = inflVerb verb
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
InflectionPN = \n -> {
|
||||||
|
t = "pn" ;
|
||||||
|
s1 = heading1 "Proper Name" ;
|
||||||
|
s2 = n.s
|
||||||
|
} ;
|
||||||
|
|
||||||
|
InflectionLN = \n -> {
|
||||||
|
t = "pn" ;
|
||||||
|
s1 = heading1 "Location Name" ;
|
||||||
|
s2 = n.s
|
||||||
|
} ;
|
||||||
|
|
||||||
|
InflectionGN = \n -> {
|
||||||
|
t = "pn" ;
|
||||||
|
s1 = heading1 "Given Name" ;
|
||||||
|
s2 = n.s
|
||||||
|
} ;
|
||||||
|
|
||||||
|
InflectionSN = \n -> {
|
||||||
|
t = "pn" ;
|
||||||
|
s1 = heading1 "Family Name" ;
|
||||||
|
s2 = n.s
|
||||||
|
} ;
|
||||||
|
|
||||||
oper
|
oper
|
||||||
inflVerb : Verb -> Str = \verb ->
|
inflVerb : Verb -> Str = \verb ->
|
||||||
let vtbl = useVerb verb
|
let vtbl = useVerb verb
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ concrete ExtendChi of Extend = CatChi **
|
|||||||
, MkVPI2, BaseVPI2, ConsVPI2, ConjVPI2, ComplVPI2
|
, MkVPI2, BaseVPI2, ConsVPI2, ConjVPI2, ComplVPI2
|
||||||
, ProDrop, ComplDirectVS, ComplDirectVQ
|
, ProDrop, ComplDirectVS, ComplDirectVQ
|
||||||
, PassVPSlash, PassAgentVPSlash
|
, PassVPSlash, PassAgentVPSlash
|
||||||
, GerundAdv, GerundNP ]
|
, GerundAdv, GerundNP, ByVP, ApposNP ]
|
||||||
with (Grammar=GrammarChi) ** open
|
with (Grammar=GrammarChi) ** open
|
||||||
Prelude
|
Prelude
|
||||||
, Coordination
|
, Coordination
|
||||||
@@ -27,7 +27,7 @@ concrete ExtendChi of Extend = CatChi **
|
|||||||
|
|
||||||
lin
|
lin
|
||||||
PassVPSlash vps = insertAdv (mkNP passive_s) vps ;
|
PassVPSlash vps = insertAdv (mkNP passive_s) vps ;
|
||||||
PassAgentVPSlash vps np = insertAdv (ss (appPrep S.by8agent_Prep np.s)) (insertAdv (mkNP passive_s) vps) ;
|
PassAgentVPSlash vps np = insertAdv (ss (appPrep S.by8agent_Prep (linNP np))) (insertAdv (mkNP passive_s) vps) ;
|
||||||
|
|
||||||
MkVPS t p vp = {s = t.s ++ p.s ++ (mkClause [] vp).s ! p.p ! t.t} ;
|
MkVPS t p vp = {s = t.s ++ p.s ++ (mkClause [] vp).s ! p.p ! t.t} ;
|
||||||
ConjVPS c = conjunctDistrSS (c.s ! CSent) ;
|
ConjVPS c = conjunctDistrSS (c.s ! CSent) ;
|
||||||
@@ -35,16 +35,16 @@ concrete ExtendChi of Extend = CatChi **
|
|||||||
ConsVPS = consrSS duncomma ;
|
ConsVPS = consrSS duncomma ;
|
||||||
|
|
||||||
-- : NP -> VPS -> S ; -- she [has walked and won't sleep]
|
-- : NP -> VPS -> S ; -- she [has walked and won't sleep]
|
||||||
PredVPS np vps = {preJiu = np.s ; postJiu = vps.s} ;
|
PredVPS np vps = {preJiu = (linNP np) ; postJiu = vps.s} ;
|
||||||
|
|
||||||
-- : NP -> VPS -> QS ; -- has she walked
|
-- : NP -> VPS -> QS ; -- has she walked
|
||||||
SQuestVPS np vps = {s = \\_ => np.s ++ vps.s ++ question_s} ;
|
SQuestVPS np vps = {s = \\_ => linNP np ++ vps.s ++ question_s} ;
|
||||||
|
|
||||||
-- : IP -> VPS -> QS ; -- who has walked
|
-- : IP -> VPS -> QS ; -- who has walked
|
||||||
-- QuestVPS ip vps = -- TODO: probably need to change structure of VPS
|
-- QuestVPS ip vps = -- TODO: probably need to change structure of VPS
|
||||||
|
|
||||||
-- : RP -> VPS -> RS ; -- which won't sleep
|
-- : RP -> VPS -> RS ; -- which won't sleep
|
||||||
RelVPS rp vps = {s = rp.s ! True ++ vps.s} ;
|
RelVPS rp vps = {s = rp.s ! True ++ vps.s ++ "的"} ;
|
||||||
|
|
||||||
MkVPI vp = {s = (mkClause [] vp).s ! Pos ! APlain} ;
|
MkVPI vp = {s = (mkClause [] vp).s ! Pos ! APlain} ;
|
||||||
ConjVPI c = conjunctDistrSS (c.s ! CSent) ;
|
ConjVPI c = conjunctDistrSS (c.s ! CSent) ;
|
||||||
@@ -68,7 +68,11 @@ concrete ExtendChi of Extend = CatChi **
|
|||||||
GerundAdv vp = mkAdv (infVP vp) ;
|
GerundAdv vp = mkAdv (infVP vp) ;
|
||||||
GerundNP vp = ResChi.mkNP (infVP vp) ;
|
GerundNP vp = ResChi.mkNP (infVP vp) ;
|
||||||
|
|
||||||
GenNP np = {s,pl = np.s ++ possessive_s ; detType = DTPoss} ;
|
ByVP vp =
|
||||||
|
let adv : Adv = GerundAdv vp
|
||||||
|
in adv ** {s = adv.s ++ "来" ; advType = ATTime} ;
|
||||||
|
|
||||||
|
GenNP np = {s,pl = linNP np ++ possessive_s ; detType = DTPoss} ;
|
||||||
GenRP nu cn = {s = \\_ => cn.s ++ relative_s} ;
|
GenRP nu cn = {s = \\_ => cn.s ++ relative_s} ;
|
||||||
|
|
||||||
ProDrop pron = pron ** {s = []} ;
|
ProDrop pron = pron ** {s = []} ;
|
||||||
@@ -79,13 +83,11 @@ concrete ExtendChi of Extend = CatChi **
|
|||||||
AdvVP (UseV <lin V vq : V>)
|
AdvVP (UseV <lin V vq : V>)
|
||||||
(mkAdv (":" ++ quoted utt.s)) ; -- DEFAULT complement added as Adv in quotes
|
(mkAdv (":" ++ quoted utt.s)) ; -- DEFAULT complement added as Adv in quotes
|
||||||
|
|
||||||
|
lin
|
||||||
|
ApposNP np1 np2 = {s = np1.s ++ np2.s; det = np1.det} ;
|
||||||
|
|
||||||
oper
|
oper
|
||||||
mkAdv : Str -> CatChi.Adv ;
|
mkAdv : Str -> CatChi.Adv ;
|
||||||
mkAdv str = lin Adv {s = str ; advType = ATManner ; hasDe = False} ;
|
mkAdv str = lin Adv {s = str ; advType = ATManner ; hasDe = False} ;
|
||||||
|
|
||||||
lin GivenName, MaleSurname, FemaleSurname, PlSurname = \n -> n ;
|
|
||||||
lin FullName gn sn = {
|
|
||||||
s = gn.s ++ sn.s
|
|
||||||
} ;
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -11,21 +11,21 @@ concrete ExtraChi of ExtraChiAbs = CatChi **
|
|||||||
|
|
||||||
lin
|
lin
|
||||||
PassVPSlash vps = insertAdv (mkNP passive_s) vps ;
|
PassVPSlash vps = insertAdv (mkNP passive_s) vps ;
|
||||||
PassAgentVPSlash vps np = insertAdv (ss (appPrep S.by8agent_Prep np.s)) (insertAdv (mkNP passive_s) vps) ;
|
PassAgentVPSlash vps np = insertAdv (ss (appPrep S.by8agent_Prep (linNP np))) (insertAdv (mkNP passive_s) vps) ;
|
||||||
|
|
||||||
MkVPS t p vp = {s = t.s ++ p.s ++ (mkClause [] vp).s ! p.p ! t.t} ;
|
MkVPS t p vp = {s = t.s ++ p.s ++ (mkClause [] vp).s ! p.p ! t.t} ;
|
||||||
ConjVPS c = conjunctDistrSS (c.s ! CSent) ;
|
ConjVPS c = conjunctDistrSS (c.s ! CSent) ;
|
||||||
BaseVPS = twoSS ;
|
BaseVPS = twoSS ;
|
||||||
ConsVPS = consrSS duncomma ;
|
ConsVPS = consrSS duncomma ;
|
||||||
|
|
||||||
PredVPS np vps = {preJiu = np.s ; postJiu = vps.s} ;
|
PredVPS np vps = {preJiu = (linNP np) ; postJiu = vps.s} ;
|
||||||
|
|
||||||
MkVPI vp = {s = (mkClause [] vp).s ! Pos ! APlain} ; --- ?? almost just a copy of VPS
|
MkVPI vp = {s = (mkClause [] vp).s ! Pos ! APlain} ; --- ?? almost just a copy of VPS
|
||||||
ConjVPI c = conjunctDistrSS (c.s ! CSent) ;
|
ConjVPI c = conjunctDistrSS (c.s ! CSent) ;
|
||||||
BaseVPI = twoSS ;
|
BaseVPI = twoSS ;
|
||||||
ConsVPI = consrSS duncomma ;
|
ConsVPI = consrSS duncomma ;
|
||||||
|
|
||||||
GenNP np = {s,pl = np.s ++ possessive_s ; detType = DTPoss} ;
|
GenNP np = {s,pl = linNP np ++ possessive_s ; detType = DTPoss} ;
|
||||||
|
|
||||||
GenRP nu cn = {s = \\_ => cn.s ++ relative_s} ; ---- ??
|
GenRP nu cn = {s = \\_ => cn.s ++ relative_s} ; ---- ??
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,8 @@ concrete GrammarChi of Grammar =
|
|||||||
TextChi,
|
TextChi,
|
||||||
StructuralChi,
|
StructuralChi,
|
||||||
IdiomChi,
|
IdiomChi,
|
||||||
TenseChi
|
TenseChi,
|
||||||
|
NamesChi
|
||||||
** {
|
** {
|
||||||
|
|
||||||
flags startcat = Phr ; unlexer = text ; lexer = text ;
|
flags startcat = Phr ; unlexer = text ; lexer = text ;
|
||||||
|
|||||||
@@ -10,11 +10,11 @@ concrete IdiomChi of Idiom = CatChi ** open Prelude, ResChi in {
|
|||||||
-- GenericCl vp = mkClause "有人" vp ; (meaning: there is a person)
|
-- GenericCl vp = mkClause "有人" vp ; (meaning: there is a person)
|
||||||
|
|
||||||
---- it is John who did it
|
---- it is John who did it
|
||||||
CleftNP np rs = mkClause rs.s copula np.s ; -- did it + de + is I
|
CleftNP np rs = mkClause rs.s copula (linNP np) ; -- did it + de + is I
|
||||||
|
|
||||||
CleftAdv ad s = mkClause (linS s ++ possessive_s) copula ad.s ; -- she sleeps + de + is here
|
CleftAdv ad s = mkClause (linS s ++ possessive_s) copula ad.s ; -- she sleeps + de + is here
|
||||||
|
|
||||||
ExistNP np = mkClause [] (regVerb you_s) np.s ; ---- infl of you
|
ExistNP np = mkClause [] (regVerb you_s) (linNP np) ; ---- infl of you
|
||||||
|
|
||||||
ExistIP ip = {s = \\_ => (mkClause [] (regVerb you_s) ip.s).s} ; ---- infl of you
|
ExistIP ip = {s = \\_ => (mkClause [] (regVerb you_s) ip.s).s} ; ---- infl of you
|
||||||
|
|
||||||
@@ -30,7 +30,7 @@ concrete IdiomChi of Idiom = CatChi ** open Prelude, ResChi in {
|
|||||||
|
|
||||||
SelfAdvVP vp = insertAdv (ss reflPron) vp ;
|
SelfAdvVP vp = insertAdv (ss reflPron) vp ;
|
||||||
SelfAdVVP vp = insertAdv (ss reflPron) vp ;
|
SelfAdVVP vp = insertAdv (ss reflPron) vp ;
|
||||||
SelfNP np = {s = np.s ++ reflPron} ;
|
SelfNP np = np ** {s = linNP np ++ reflPron} ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
15
src/chinese/NamesChi.gf
Normal file
15
src/chinese/NamesChi.gf
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
concrete NamesChi of Names = CatChi ** open ResChi, ParadigmsChi, Prelude in {
|
||||||
|
|
||||||
|
lin GivenName, MaleSurname, FemaleSurname, PlSurname = \n -> n ** {det = []} ;
|
||||||
|
lin FullName gn sn = {
|
||||||
|
s = gn.s ++ sn.s ;
|
||||||
|
det = []
|
||||||
|
} ;
|
||||||
|
|
||||||
|
lin UseLN ln = ln ** {det = []} ;
|
||||||
|
|
||||||
|
lin InLN ln =
|
||||||
|
let prep : Prep = mkPrep "里" []
|
||||||
|
in ss (appPrep prep (linNP (ln ** {det = []}))) ** {advType = prep.advType ; hasDe = prep.hasDe} ; --- should depend on np too ?
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,28 +1,33 @@
|
|||||||
concrete NounChi of Noun = CatChi ** open ResChi, Prelude in {
|
concrete NounChi of Noun = CatChi ** open ResChi, Prelude in {
|
||||||
|
|
||||||
lin
|
lin
|
||||||
DetCN det cn = case det.detType of {
|
DetCN det cn = cn ** {
|
||||||
DTFull Sg => {s = det.s ++ cn.c ++ cn.s} ; -- this house
|
det = case det.detType of {
|
||||||
DTFull Pl => {s = det.s ++ xie_s ++ cn.s} ; -- these houses
|
DTFull Sg => det.s ++ cn.c ; -- this house
|
||||||
DTNum => {s = det.s ++ cn.c ++ cn.s} ; -- (these) five houses
|
DTFull Pl => det.s ++ xie_s ; -- these houses
|
||||||
DTPoss => {s = det.s ++ cn.s} -- our (five) houses
|
DTNum => det.s ++ cn.c ; -- (these) five houses
|
||||||
} ;
|
DTPoss => det.s -- our (five) houses
|
||||||
UsePN pn = pn ;
|
}
|
||||||
UsePron p = p ;
|
} ;
|
||||||
|
|
||||||
DetNP det = {s = case det.detType of {
|
UsePN pn = pn ** {det = []} ;
|
||||||
|
UsePron p = p ** {det = []} ;
|
||||||
|
|
||||||
|
DetNP det = {
|
||||||
|
s = [] ;
|
||||||
|
det = case det.detType of {
|
||||||
DTFull Pl => det.s ++ xie_s ;
|
DTFull Pl => det.s ++ xie_s ;
|
||||||
DTPoss => det.s ;
|
DTPoss => det.s ;
|
||||||
_ => det.s ++ ge_s
|
_ => det.s ++ ge_s
|
||||||
} ;
|
} ;
|
||||||
} ; ----
|
} ; ----
|
||||||
|
|
||||||
PredetNP pred np = mkNP (pred.s ++ np.s) ; ---- possessive_s ++ np.s) ;
|
PredetNP pred np = np ** {s = pred.s ++ np.s} ; ---- possessive_s ++ np.s) ;
|
||||||
|
|
||||||
PPartNP np v2 = mkNP ((predV v2 v2.part).verb.s ++ possessive_s ++ np.s) ; ---- ??
|
PPartNP np v2 = np ** {s = (predV v2 v2.part).verb.s ++ possessive_s ++ np.s} ; ---- ??
|
||||||
|
|
||||||
AdvNP np adv = mkNP (adv.s ++ possessiveIf adv.hasDe ++ np.s) ;
|
AdvNP np adv = np ** {s = adv.s ++ possessiveIf adv.hasDe ++ np.s} ;
|
||||||
ExtAdvNP np adv = mkNP (adv.s ++ possessiveIf adv.hasDe ++ embedInCommas np.s) ; ---- commas?
|
ExtAdvNP np adv = np ** {s = adv.s ++ possessiveIf adv.hasDe ++ embedInCommas np.s} ; ---- commas?
|
||||||
|
|
||||||
DetQuant quant num = {
|
DetQuant quant num = {
|
||||||
s = case num.numType of {
|
s = case num.numType of {
|
||||||
@@ -57,6 +62,7 @@ concrete NounChi of Noun = CatChi ** open ResChi, Prelude in {
|
|||||||
|
|
||||||
NumCard n = n ** {numType = NTFull} ;
|
NumCard n = n ** {numType = NTFull} ;
|
||||||
NumDigits d = d ** {numType = NTFull} ;
|
NumDigits d = d ** {numType = NTFull} ;
|
||||||
|
NumDecimal d = d ** {numType = NTFull} ;
|
||||||
OrdDigits d = {s = ordinal_s ++ d.s} ;
|
OrdDigits d = {s = ordinal_s ++ d.s} ;
|
||||||
|
|
||||||
NumNumeral numeral = {s = numeral.p} ; -- liang instead of yi
|
NumNumeral numeral = {s = numeral.p} ; -- liang instead of yi
|
||||||
@@ -70,15 +76,15 @@ concrete NounChi of Noun = CatChi ** open ResChi, Prelude in {
|
|||||||
DefArt = mkQuant [] [] DTPoss ; -- use that_Quant if you want the_s
|
DefArt = mkQuant [] [] DTPoss ; -- use that_Quant if you want the_s
|
||||||
IndefArt = mkQuant yi_s [] DTNum ; -- (DTFull Sg) ; -- empty in the plural
|
IndefArt = mkQuant yi_s [] DTNum ; -- (DTFull Sg) ; -- empty in the plural
|
||||||
|
|
||||||
MassNP cn = cn ;
|
MassNP cn = mkNP cn.s ;
|
||||||
|
|
||||||
UseN n = n ;
|
UseN n = n ;
|
||||||
UseN2 n = n ;
|
UseN2 n = n ;
|
||||||
Use2N3 f = {s = f.s ; c = f.c ; c2 = f.c2} ;
|
Use2N3 f = {s = f.s ; c = f.c ; c2 = f.c2} ;
|
||||||
Use3N3 f = {s = f.s ; c = f.c ; c2 = f.c3} ;
|
Use3N3 f = {s = f.s ; c = f.c ; c2 = f.c3} ;
|
||||||
|
|
||||||
ComplN2 f x = {s = appPrep f.c2 x.s ++ f.s ; c = f.c} ;
|
ComplN2 f x = {s = appPrep f.c2 (linNP x) ++ f.s ; c = f.c} ;
|
||||||
ComplN3 f x = {s = appPrep f.c2 x.s ++ f.s ; c = f.c ; c2 = f.c3} ;
|
ComplN3 f x = {s = appPrep f.c2 (linNP x) ++ f.s ; c = f.c ; c2 = f.c3} ;
|
||||||
|
|
||||||
AdjCN ap cn = case ap.monoSyl of {
|
AdjCN ap cn = case ap.monoSyl of {
|
||||||
True => {s = ap.s ! Attr ++ cn.s ; c = cn.c} ;
|
True => {s = ap.s ! Attr ++ cn.s ; c = cn.c} ;
|
||||||
@@ -88,13 +94,13 @@ concrete NounChi of Noun = CatChi ** open ResChi, Prelude in {
|
|||||||
RelCN cn rs = {s = rs.s ++ cn.s ; c = cn.c} ;
|
RelCN cn rs = {s = rs.s ++ cn.s ; c = cn.c} ;
|
||||||
AdvCN cn ad = {s = ad.s ++ possessiveIf ad.hasDe ++ cn.s ; c = cn.c} ;
|
AdvCN cn ad = {s = ad.s ++ possessiveIf ad.hasDe ++ cn.s ; c = cn.c} ;
|
||||||
SentCN cn cs = {s = cs.s ++ cn.s ; c = cn.c} ;
|
SentCN cn cs = {s = cs.s ++ cn.s ; c = cn.c} ;
|
||||||
ApposCN cn np = {s = np.s ++ cn.s ; c = cn.c} ;
|
ApposCN cn np = {s = linNP np ++ cn.s ; c = cn.c} ;
|
||||||
|
|
||||||
RelNP np rs = mkNP (rs.s ++ np.s) ;
|
RelNP np rs = np ** {s = rs.s ++ np.s} ;
|
||||||
|
|
||||||
PossNP cn np = {s = np.s ++ possessive_s ++ cn.s ; c = cn.c} ;
|
PossNP cn np = {s = linNP np ++ possessive_s ++ cn.s ; c = cn.c} ;
|
||||||
PartNP cn np = {s = np.s ++ possessive_s ++ cn.s ; c = cn.c} ;
|
PartNP cn np = {s = linNP np ++ possessive_s ++ cn.s ; c = cn.c} ;
|
||||||
|
|
||||||
CountNP det np = {s = det.s ++ ge_s ++ possessive_s ++ np.s} ; --- classifier from NP?
|
CountNP det np = np ** {det = det.s ++ ge_s ++ possessive_s ++ np.det} ; --- classifier from NP?
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
concrete NumeralChi of Numeral = CatChi [Numeral,Digits] ** open ResChi, Prelude in {
|
concrete NumeralChi of Numeral = CatChi [Numeral,Digits,Decimal] ** open ResChi, Prelude in {
|
||||||
|
|
||||||
flags coding = utf8 ;
|
flags coding = utf8 ;
|
||||||
|
|
||||||
@@ -162,4 +162,16 @@ lin pot4as5 n = n ;
|
|||||||
D_8 = ss "8" ;
|
D_8 = ss "8" ;
|
||||||
D_9 = ss "9" ;
|
D_9 = ss "9" ;
|
||||||
|
|
||||||
|
PosDecimal d = d ** {hasDot=False} ;
|
||||||
|
NegDecimal d = {
|
||||||
|
s = "-" ++ BIND ++ d.s ;
|
||||||
|
hasDot=False
|
||||||
|
} ;
|
||||||
|
IFrac d i = {
|
||||||
|
s=d.s ++
|
||||||
|
if_then_Str d.hasDot BIND (BIND++"."++BIND) ++
|
||||||
|
i.s;
|
||||||
|
hasDot=True
|
||||||
|
} ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -184,7 +184,7 @@ oper
|
|||||||
emptyPrep : Preposition = mkPrep [] ;
|
emptyPrep : Preposition = mkPrep [] ;
|
||||||
|
|
||||||
mkpNP : Str -> CatChi.NP
|
mkpNP : Str -> CatChi.NP
|
||||||
= \s -> lin NP {s = word s} ;
|
= \s -> lin NP {s = word s ; det = []} ;
|
||||||
mkAdV : Str -> AdV
|
mkAdV : Str -> AdV
|
||||||
= \s -> lin AdV {s = word s} ;
|
= \s -> lin AdV {s = word s} ;
|
||||||
mkAdN : Str -> AdN
|
mkAdN : Str -> AdN
|
||||||
@@ -215,6 +215,8 @@ oper
|
|||||||
= \s -> lin RP {s = table {True => [] ; False => word s}} ;
|
= \s -> lin RP {s = table {True => [] ; False => word s}} ;
|
||||||
|
|
||||||
|
|
||||||
|
mkMU : Str -> MU = \s -> lin MU {s=s; isPre=False} ;
|
||||||
|
|
||||||
--. auxiliary
|
--. auxiliary
|
||||||
|
|
||||||
oper
|
oper
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ concrete PhraseChi of Phrase = CatChi ** open Prelude, ResChi in {
|
|||||||
|
|
||||||
UttIP ip = ip ;
|
UttIP ip = ip ;
|
||||||
UttIAdv iadv = iadv ;
|
UttIAdv iadv = iadv ;
|
||||||
UttNP np = np ;
|
UttNP np = ss (linNP np) ;
|
||||||
UttCN cn = cn ;
|
UttCN cn = cn ;
|
||||||
UttAP ap = {s = ap.s!Attr} ;
|
UttAP ap = {s = ap.s!Attr} ;
|
||||||
UttCard x = x ;
|
UttCard x = x ;
|
||||||
@@ -23,6 +23,6 @@ concrete PhraseChi of Phrase = CatChi ** open Prelude, ResChi in {
|
|||||||
PConjConj conj = ss (conj.s ! CSent).s2 ;
|
PConjConj conj = ss (conj.s ! CSent).s2 ;
|
||||||
|
|
||||||
NoVoc = {s = []} ;
|
NoVoc = {s = []} ;
|
||||||
VocNP np = {s = np.s ++ chcomma} ; ---- ??
|
VocNP np = {s = linNP np ++ chcomma} ; ---- ??
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,11 +14,11 @@ concrete QuestionChi of Question = CatChi **
|
|||||||
s = \\_,p,a => ip.s ++ vp.prePart ++ useVerb vp.verb ! p ! a ++ vp.compl
|
s = \\_,p,a => ip.s ++ vp.prePart ++ useVerb vp.verb ! p ! a ++ vp.compl
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
QuestSlash ip cls = {s = \\_ => (mkClauseCompl cls.np (insertObj (ss (appPrep cls.c2 ip.s)) cls.vp) []).s} ;
|
QuestSlash ip cls = {s = \\_ => (mkClauseCompl cls.np (insertObj (mkNP (appPrep cls.c2 ip.s)) cls.vp) []).s} ;
|
||||||
|
|
||||||
QuestIAdv iadv cl = {s = \\_ => (mkClauseCompl cl.np (insertAdv iadv cl.vp) []).s} ;
|
QuestIAdv iadv cl = {s = \\_ => (mkClauseCompl cl.np (insertAdv iadv cl.vp) []).s} ;
|
||||||
|
|
||||||
QuestIComp icomp np = {s = \\_,p,a => np.s ++ icomp.s} ; ---- order
|
QuestIComp icomp np = {s = \\_,p,a => linNP np ++ icomp.s} ; ---- order
|
||||||
|
|
||||||
PrepIP p ip = ss (appPrep p ip.s) ;
|
PrepIP p ip = ss (appPrep p ip.s) ;
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ concrete RelativeChi of Relative = CatChi ** open ResChi, Prelude in {
|
|||||||
} ;
|
} ;
|
||||||
} ; ---- ??
|
} ; ---- ??
|
||||||
RelSlash rp slash = {s = \\p,a => slash.s ! p ! a ++ appPrep slash.c2 (rp.s ! False)} ;
|
RelSlash rp slash = {s = \\p,a => slash.s ! p ! a ++ appPrep slash.c2 (rp.s ! False)} ;
|
||||||
FunRP p np rp = {s = \\a => appPrep p np.s ++ rp.s ! a} ; ---- ??
|
FunRP p np rp = {s = \\a => appPrep p (linNP np) ++ rp.s ! a} ; ---- ??
|
||||||
IdRP = {s = table {True => [] ; False => relative_s}} ;
|
IdRP = {s = table {True => [] ; False => relative_s}} ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -112,7 +112,8 @@ oper
|
|||||||
isAdj : Bool ; -- whether it is an adjectival predication and behaves differently in relative
|
isAdj : Bool ; -- whether it is an adjectival predication and behaves differently in relative
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
NP = {s : Str} ;
|
NP = {det,s : Str} ; -- keep Det separate, because RelNP may put in a RS and that goes before the Det
|
||||||
|
linNP : NP -> Str = \np -> np.det ++ np.s ;
|
||||||
|
|
||||||
-- for morphology
|
-- for morphology
|
||||||
|
|
||||||
@@ -192,11 +193,11 @@ oper
|
|||||||
} ;
|
} ;
|
||||||
|
|
||||||
insertObj : NP -> VP -> VP = \np,vp -> vp ** {
|
insertObj : NP -> VP -> VP = \np,vp -> vp ** {
|
||||||
compl = np.s ++ vp.compl ;
|
compl = linNP np ++ vp.compl ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
insertObjPost : NP -> VP -> VP = \np,vp -> vp ** {
|
insertObjPost : NP -> VP -> VP = \np,vp -> vp ** {
|
||||||
compl = vp.compl ++ np.s ;
|
compl = vp.compl ++ linNP np ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
insertAdv : SS -> VP -> VP = \adv,vp -> vp ** {
|
insertAdv : SS -> VP -> VP = \adv,vp -> vp ** {
|
||||||
@@ -215,7 +216,7 @@ oper
|
|||||||
} ;
|
} ;
|
||||||
|
|
||||||
insertExtra : SS -> VP -> VP = \ext,vp ->
|
insertExtra : SS -> VP -> VP = \ext,vp ->
|
||||||
insertObjPost ext vp ;
|
insertObjPost (mkNP ext.s) vp ;
|
||||||
|
|
||||||
-- clauses: keep np and vp separate to enable insertion of IAdv
|
-- clauses: keep np and vp separate to enable insertion of IAdv
|
||||||
|
|
||||||
@@ -250,7 +251,7 @@ oper
|
|||||||
mkClauseCompl : Str -> VP -> Str -> Clause = \np,vp,compl -> {
|
mkClauseCompl : Str -> VP -> Str -> Clause = \np,vp,compl -> {
|
||||||
s = \\p,a => vp.topic ++ np ++ vp.prePart ++ useVerb vp.verb ! p ! a ++ vp.compl ++ compl ;
|
s = \\p,a => vp.topic ++ np ++ vp.prePart ++ useVerb vp.verb ! p ! a ++ vp.compl ++ compl ;
|
||||||
np = vp.topic ++ np ;
|
np = vp.topic ++ np ;
|
||||||
vp = insertObj (ss compl) vp ;
|
vp = insertObj (mkNP compl) vp ;
|
||||||
postJiu = \\p,a => vp.prePart ++ useVerb vp.verb ! p ! a ++ vp.compl ++ compl ;
|
postJiu = \\p,a => vp.prePart ++ useVerb vp.verb ! p ! a ++ vp.compl ++ compl ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
@@ -278,7 +279,8 @@ oper
|
|||||||
} ;
|
} ;
|
||||||
|
|
||||||
pronNP : (s : Str) -> NP = \s -> {
|
pronNP : (s : Str) -> NP = \s -> {
|
||||||
s = word s
|
s = word s ;
|
||||||
|
det = []
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
Preposition = {prepPre : Str ; prepPost : Str ; advType : AdvType ; hasDe : Bool} ;
|
Preposition = {prepPre : Str ; prepPost : Str ; advType : AdvType ; hasDe : Bool} ;
|
||||||
@@ -316,7 +318,7 @@ oper
|
|||||||
|
|
||||||
-- added by AR
|
-- added by AR
|
||||||
|
|
||||||
mkNP : Str -> NP = ss ; -- not to be used in lexicon building
|
mkNP : Str -> NP = \s -> {s = s ; det = []} ; -- not to be used in lexicon building
|
||||||
|
|
||||||
appPrep : Preposition -> Str -> Str = \prep,s ->
|
appPrep : Preposition -> Str -> Str = \prep,s ->
|
||||||
prep.prepPre ++ s ++ prep.prepPost ;
|
prep.prepPre ++ s ++ prep.prepPost ;
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ concrete SentenceChi of Sentence = CatChi **
|
|||||||
|
|
||||||
lin
|
lin
|
||||||
|
|
||||||
PredVP np vp = mkClause np.s vp ;
|
PredVP np vp = mkClause (linNP np) vp ;
|
||||||
|
|
||||||
PredSCVP sc vp = mkClause sc.s vp ;
|
PredSCVP sc vp = mkClause sc.s vp ;
|
||||||
|
|
||||||
@@ -17,10 +17,10 @@ concrete SentenceChi of Sentence = CatChi **
|
|||||||
} ;
|
} ;
|
||||||
|
|
||||||
SlashVP np vp =
|
SlashVP np vp =
|
||||||
mkClauseCompl np.s vp []
|
mkClauseCompl (linNP np) vp []
|
||||||
** {c2 = vp.c2} ;
|
** {c2 = vp.c2} ;
|
||||||
|
|
||||||
SlashVS np vs sslash = <mkClause np.s vs sslash.s : Clause> ** {c2 = sslash.c2} ;
|
SlashVS np vs sslash = <mkClause (linNP np) vs sslash.s : Clause> ** {c2 = sslash.c2} ;
|
||||||
|
|
||||||
|
|
||||||
-- yet another reason for discontinuity of clauses
|
-- yet another reason for discontinuity of clauses
|
||||||
|
|||||||
@@ -142,8 +142,8 @@ either7or_DConj = {s = table { -- modified by chenpeng 11.19
|
|||||||
conjType = NotJiu ;
|
conjType = NotJiu ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
everybody_NP = ssword "每个人" ; -- [mark] "每个人": 每(every)+个(classifier)+人(person)
|
everybody_NP = mkNP (ssword "每个人").s ; -- [mark] "每个人": 每(every)+个(classifier)+人(person)
|
||||||
everything_NP = ssword "每件事" ; -- [mark] "每件事": 每(every)+件(classifier)+事(thing)
|
everything_NP = mkNP (ssword "每件事").s ; -- [mark] "每件事": 每(every)+件(classifier)+事(thing)
|
||||||
everywhere_Adv = mkAdv "到处" ;
|
everywhere_Adv = mkAdv "到处" ;
|
||||||
here7from_Adv = mkAdv "从这里" ; -- from here
|
here7from_Adv = mkAdv "从这里" ; -- from here
|
||||||
here7to_Adv = mkAdv "到这里" ; -- to here
|
here7to_Adv = mkAdv "到这里" ; -- to here
|
||||||
@@ -161,13 +161,13 @@ if_then_Conj = {s = table { -- added by chenpeng 11.19
|
|||||||
} ;
|
} ;
|
||||||
conjType = Jiu ;
|
conjType = Jiu ;
|
||||||
} ;
|
} ;
|
||||||
nobody_NP = ssword "没人" ;
|
nobody_NP = mkNP (ssword "没人").s ;
|
||||||
nothing_NP = ssword "没有什么" ;
|
nothing_NP = mkNP (ssword "没有什么").s ;
|
||||||
on_Prep = mkPrep "在" "上" ;
|
on_Prep = mkPrep "在" "上" ;
|
||||||
only_Predet = ssword "只有" ; -- only John
|
only_Predet = ssword "只有" ; -- only John
|
||||||
so_AdA = ssword "如此" ;
|
so_AdA = ssword "如此" ;
|
||||||
somebody_NP = ssword "某人" ;
|
somebody_NP = mkNP (ssword "某人").s ;
|
||||||
something_NP = ssword "某事" ; -- [mark] in sent, it depends on the context
|
something_NP = mkNP (ssword "某事").s ; -- [mark] in sent, it depends on the context
|
||||||
somewhere_Adv = mkAdv "某处" ;
|
somewhere_Adv = mkAdv "某处" ;
|
||||||
that_Subj = mkSubj [] chcomma ; -- that + S [mark] comma
|
that_Subj = mkSubj [] chcomma ; -- that + S [mark] comma
|
||||||
there7from_Adv = mkAdv "从那里" ; -- from there
|
there7from_Adv = mkAdv "从那里" ; -- from there
|
||||||
|
|||||||
@@ -11,12 +11,12 @@ concrete SymbolChi of Symbol = CatChi ** open Prelude, ResChi in {
|
|||||||
NumPN i = i ;
|
NumPN i = i ;
|
||||||
CNIntNP cn i = {
|
CNIntNP cn i = {
|
||||||
s = cn.s ++ i.s ;
|
s = cn.s ++ i.s ;
|
||||||
c = cn.c
|
det = cn.c
|
||||||
} ;
|
} ;
|
||||||
CNSymbNP det cn xs = ss (det.s ++ cn.s ++ xs.s) ; ----
|
CNSymbNP det cn xs = {det = det.s ; s = cn.s ++ xs.s} ; ----
|
||||||
CNNumNP cn i = {
|
CNNumNP cn i = {
|
||||||
s = cn.s ++ i.s ;
|
s = cn.s ++ i.s ;
|
||||||
c = cn.c
|
det = cn.c
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
SymbS sy = simpleS sy.s ;
|
SymbS sy = simpleS sy.s ;
|
||||||
|
|||||||
@@ -7,14 +7,14 @@ concrete VerbChi of Verb = CatChi ** open ResChi, Prelude in {
|
|||||||
|
|
||||||
SlashV2a v = predV v v.part ** {c2 = v.c2 ; isPre = v.hasPrep} ;
|
SlashV2a v = predV v v.part ** {c2 = v.c2 ; isPre = v.hasPrep} ;
|
||||||
|
|
||||||
Slash2V3 v np = insertAdv (mkNP (ba_s ++ np.s)) (predV v v.part) ** {c2 = v.c3 ; isPre = v.hasPrep} ; -- slot for third argument
|
Slash2V3 v np = insertAdv (mkNP (ba_s ++ linNP np)) (predV v v.part) ** {c2 = v.c3 ; isPre = v.hasPrep} ; -- slot for third argument
|
||||||
Slash3V3 v np = insertObj (mkNP (appPrep v.c3 np.s)) (predV v v.part) ** {c2 = v.c2 ; isPre = True} ; -- slot for ba object
|
Slash3V3 v np = insertObj (mkNP (appPrep v.c3 (linNP np))) (predV v v.part) ** {c2 = v.c2 ; isPre = True} ; -- slot for ba object
|
||||||
|
|
||||||
SlashV2A v ap = insertObj {s = ap.s ! Pred} (predV v v.part) ** {c2 = v.c2 ; isPre = v.hasPrep} ;
|
SlashV2A v ap = insertObj (mkNP (ap.s ! Pred)) (predV v v.part) ** {c2 = v.c2 ; isPre = v.hasPrep} ;
|
||||||
|
|
||||||
SlashV2V v vp = insertObj (mkNP (infVP vp)) (predV v v.part) ** {c2 = v.c2 ; isPre = v.hasPrep} ;
|
SlashV2V v vp = insertObj (mkNP (infVP vp)) (predV v v.part) ** {c2 = v.c2 ; isPre = v.hasPrep} ;
|
||||||
SlashV2S v s = insertObj (ss (say_s ++ linS s)) (predV v v.part) ** {c2 = v.c2 ; isPre = v.hasPrep} ;
|
SlashV2S v s = insertObj (mkNP (say_s ++ linS s)) (predV v v.part) ** {c2 = v.c2 ; isPre = v.hasPrep} ;
|
||||||
SlashV2Q v q = insertObj (ss (say_s ++ q.s ! False)) (predV v v.part) ** {c2 = v.c2 ; isPre = v.hasPrep} ;
|
SlashV2Q v q = insertObj (mkNP (say_s ++ q.s ! False)) (predV v v.part) ** {c2 = v.c2 ; isPre = v.hasPrep} ;
|
||||||
|
|
||||||
ComplVV v vp = {
|
ComplVV v vp = {
|
||||||
verb = v ;
|
verb = v ;
|
||||||
@@ -23,14 +23,14 @@ concrete VerbChi of Verb = CatChi ** open ResChi, Prelude in {
|
|||||||
isAdj = False ;
|
isAdj = False ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
ComplVS v s = insertObj (ss (linS s)) (predV v []) ;
|
ComplVS v s = insertObj (mkNP (linS s)) (predV v []) ;
|
||||||
ComplVQ v q = insertObj (ss (q.s ! False)) (predV v []) ;
|
ComplVQ v q = insertObj (mkNP (q.s ! False)) (predV v []) ;
|
||||||
ComplVA v ap = insertObj {s = ap.s ! Pred} (predV v []) ;
|
ComplVA v ap = insertObj (mkNP (ap.s ! Pred)) (predV v []) ;
|
||||||
|
|
||||||
ComplSlash vp np = case vp.isPre of {
|
ComplSlash vp np = case vp.isPre of {
|
||||||
--- True => insertAdv (mkNP (ba_s ++ np.s)) vp ; --- ba or vp.c2 ?
|
--- True => insertAdv (mkNP (ba_s ++ np.s)) vp ; --- ba or vp.c2 ?
|
||||||
True => insertPP (mkNP (appPrep vp.c2 np.s)) vp ; --- ba or vp.c2 ?
|
True => insertPP (mkNP (appPrep vp.c2 (linNP np))) vp ; --- ba or vp.c2 ?
|
||||||
False => insertObj (mkNP (appPrep vp.c2 np.s)) vp
|
False => insertObj (mkNP (appPrep vp.c2 (linNP np))) vp
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
UseComp comp = comp ;
|
UseComp comp = comp ;
|
||||||
@@ -44,13 +44,13 @@ concrete VerbChi of Verb = CatChi ** open ResChi, Prelude in {
|
|||||||
(insertObj (mkNP (infVP vp)) (predV v v.part)) ** {c2 = vp.c2 ; isPre = vp.isPre} ;
|
(insertObj (mkNP (infVP vp)) (predV v v.part)) ** {c2 = vp.c2 ; isPre = vp.isPre} ;
|
||||||
|
|
||||||
AdvVP vp adv = case adv.advType of {
|
AdvVP vp adv = case adv.advType of {
|
||||||
ATManner => insertObj (ss (deVAdv_s ++ adv.s)) vp ; -- he sleeps *well*
|
ATManner => insertObj (mkNP (deVAdv_s ++ adv.s)) vp ; -- he sleeps *well*
|
||||||
ATPlace True => insertAdvPost adv vp ; -- he today *in the house* sleeps
|
ATPlace True => insertAdvPost adv vp ; -- he today *in the house* sleeps
|
||||||
ATPlace False => insertAdvPost (ss (zai_V.s ++ adv.s)) vp ; -- he today *here* sleeps
|
ATPlace False => insertAdvPost (ss (zai_V.s ++ adv.s)) vp ; -- he today *here* sleeps
|
||||||
ATTime | ATPoss => insertTopic adv vp -- *today* he here sleeps
|
ATTime | ATPoss => insertTopic adv vp -- *today* he here sleeps
|
||||||
} ;
|
} ;
|
||||||
ExtAdvVP vp adv = case adv.advType of { ---- ExtAdvVP also ?
|
ExtAdvVP vp adv = case adv.advType of { ---- ExtAdvVP also ?
|
||||||
ATManner => insertObj (ss (deVAdv_s ++ adv.s)) vp ; -- he sleeps *well*
|
ATManner => insertObj (mkNP (deVAdv_s ++ adv.s)) vp ; -- he sleeps *well*
|
||||||
ATPlace True => insertAdvPost adv vp ; -- he today *in the house* sleeps
|
ATPlace True => insertAdvPost adv vp ; -- he today *in the house* sleeps
|
||||||
ATPlace False => insertAdvPost (ss (zai_V.s ++ adv.s)) vp ; -- he today *here* sleeps
|
ATPlace False => insertAdvPost (ss (zai_V.s ++ adv.s)) vp ; -- he today *here* sleeps
|
||||||
ATTime | ATPoss => insertTopic adv vp -- *today* he here sleeps
|
ATTime | ATPoss => insertTopic adv vp -- *today* he here sleeps
|
||||||
@@ -73,17 +73,17 @@ concrete VerbChi of Verb = CatChi ** open ResChi, Prelude in {
|
|||||||
|
|
||||||
CompNP np = insertObj np (predV copula []) ; ----
|
CompNP np = insertObj np (predV copula []) ; ----
|
||||||
|
|
||||||
CompCN cn = insertObj cn (predV copula []) ; ----
|
CompCN cn = insertObj (mkNP cn.s) (predV copula []) ; ----
|
||||||
|
|
||||||
CompAdv adv = case adv.advType of {
|
CompAdv adv = case adv.advType of {
|
||||||
ATPlace True => insertObj adv (predV noVerb []) ;
|
ATPlace True => insertObj (mkNP adv.s) (predV noVerb []) ;
|
||||||
_ => insertObj adv (predV zai_V []) ---- for all others ??
|
_ => insertObj (mkNP adv.s) (predV zai_V []) ---- for all others ??
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
VPSlashPrep vp prep = vp ** {c2 = prep ; isPre = True} ;
|
VPSlashPrep vp prep = vp ** {c2 = prep ; isPre = True} ;
|
||||||
|
|
||||||
AdvVPSlash vp adv = case adv.advType of {
|
AdvVPSlash vp adv = case adv.advType of {
|
||||||
ATManner => insertObj (ss (deVAdv_s ++ adv.s)) vp ; -- he sleeps well
|
ATManner => insertObj (mkNP (deVAdv_s ++ adv.s)) vp ; -- he sleeps well
|
||||||
ATPlace True => insertAdv adv vp ; -- he sleeps on the table
|
ATPlace True => insertAdv adv vp ; -- he sleeps on the table
|
||||||
_ => insertAdv (ss (zai_V.s ++ adv.s)) vp -- he sleeps in the house / today
|
_ => insertAdv (ss (zai_V.s ++ adv.s)) vp -- he sleeps in the house / today
|
||||||
} ** {c2 = vp.c2 ; isPre = vp.isPre} ;
|
} ** {c2 = vp.c2 ; isPre = vp.isPre} ;
|
||||||
|
|||||||
@@ -160,4 +160,16 @@ lin pot3plus n m =
|
|||||||
D_8 = ss "8" ;
|
D_8 = ss "8" ;
|
||||||
D_9 = ss "9" ;
|
D_9 = ss "9" ;
|
||||||
|
|
||||||
|
PosDecimal d = d ** {hasDot=False} ;
|
||||||
|
NegDecimal d = {
|
||||||
|
s = "-" ++ BIND ++ d.s ;
|
||||||
|
hasDot=False
|
||||||
|
} ;
|
||||||
|
IFrac d i = {
|
||||||
|
s=d.s ++
|
||||||
|
if_then_Str d.hasDot BIND (BIND++"."++BIND) ++
|
||||||
|
i.s;
|
||||||
|
hasDot=True
|
||||||
|
} ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
concrete CommonX of Common = open (R = ParamX) in {
|
concrete CommonX of Common = open (R = ParamX), Prelude in {
|
||||||
|
|
||||||
lincat
|
lincat
|
||||||
Text = {s : Str} ;
|
Text = {s : Str} ;
|
||||||
@@ -20,4 +20,6 @@ concrete CommonX of Common = open (R = ParamX) in {
|
|||||||
Ant = {s : Str ; a : R.Anteriority} ;
|
Ant = {s : Str ; a : R.Anteriority} ;
|
||||||
Pol = {s : Str ; p : R.Polarity} ;
|
Pol = {s : Str ; p : R.Polarity} ;
|
||||||
|
|
||||||
|
MU = {s : Str ; isPre : Bool} ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,9 +22,11 @@ lin
|
|||||||
GenModNP num np cn = DetCN (DetQuant DefArt num) (AdvCN cn (PrepNP possess_Prep np)) ; -- this man's car(s) ; DEFAULT the car of this man
|
GenModNP num np cn = DetCN (DetQuant DefArt num) (AdvCN cn (PrepNP possess_Prep np)) ; -- this man's car(s) ; DEFAULT the car of this man
|
||||||
GenModIP = variants {} ; -- Num -> IP -> CN -> IP ; -- whose car(s)
|
GenModIP = variants {} ; -- Num -> IP -> CN -> IP ; -- whose car(s)
|
||||||
CompBareCN cn = CompCN cn ; -- (is) teacher ; DEFAULT is a teacher
|
CompBareCN cn = CompCN cn ; -- (is) teacher ; DEFAULT is a teacher
|
||||||
StrandQuestSlash = QuestSlash ; -- whom does John live with ; DEFAULT with whom does John live
|
StrandQuestSlash = QuestSlash ; -- whom does John live with (default in Eng)
|
||||||
StrandRelSlash = RelSlash ; -- that he lives in ; DEFAULT in which he lives
|
StrandRelSlash = RelSlash ; -- that he lives in (standard in Eng)
|
||||||
EmptyRelSlash = RelSlash IdRP ; -- he lives in ; DEFAULT in which he lives
|
PiedPipingQuestSlash = QuestSlash ; -- with whom does John live (default in most languages)
|
||||||
|
PiedPipingRelSlash = RelSlash ; -- in which he lives (default in most languages)
|
||||||
|
EmptyRelSlash = RelSlash IdRP ; -- he lives in ; that he lives in
|
||||||
MkVPS vp = variants {} ; -- Temp -> Pol -> VP -> VPS ; -- hasn't slept
|
MkVPS vp = variants {} ; -- Temp -> Pol -> VP -> VPS ; -- hasn't slept
|
||||||
ConjVPS = variants {} ; -- Conj -> [VPS] -> VPS ; -- has walked and won't sleep
|
ConjVPS = variants {} ; -- Conj -> [VPS] -> VPS ; -- has walked and won't sleep
|
||||||
PredVPS = variants {} ; -- NP -> VPS -> S ; -- has walked and won't sleep
|
PredVPS = variants {} ; -- NP -> VPS -> S ; -- has walked and won't sleep
|
||||||
@@ -136,6 +138,10 @@ lin
|
|||||||
lincat
|
lincat
|
||||||
X = {s : Str} ;
|
X = {s : Str} ;
|
||||||
|
|
||||||
|
lin
|
||||||
|
UseComp_estar = UseComp ;
|
||||||
|
UseComp_ser = UseComp ;
|
||||||
|
|
||||||
lin
|
lin
|
||||||
CardCNCard = variants {} ;
|
CardCNCard = variants {} ;
|
||||||
|
|
||||||
|
|||||||
@@ -18,6 +18,9 @@ resource ParamX = open Prelude in {
|
|||||||
| Cond --# notpresent
|
| Cond --# notpresent
|
||||||
;
|
;
|
||||||
|
|
||||||
|
param
|
||||||
|
Sex = Male | Female ;
|
||||||
|
|
||||||
param
|
param
|
||||||
|
|
||||||
Polarity = Pos | Neg ;
|
Polarity = Pos | Neg ;
|
||||||
|
|||||||
@@ -68,5 +68,6 @@ concrete CatHrv of Cat =
|
|||||||
|
|
||||||
lincat Numeral = {s : AdjForms ; size : NumSize} ;
|
lincat Numeral = {s : AdjForms ; size : NumSize} ;
|
||||||
lincat Digits = {s : Str ; size : NumSize} ;
|
lincat Digits = {s : Str ; size : NumSize} ;
|
||||||
|
lincat Decimal = {s : Str ; size : NumSize ; hasDot : Bool} ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,6 +26,8 @@ concrete ExtendHrv of Extend = CatHrv **
|
|||||||
,ComplBareVS
|
,ComplBareVS
|
||||||
,CompIQuant
|
,CompIQuant
|
||||||
,CompBareCN
|
,CompBareCN
|
||||||
|
,PiedPipingQuestSlash
|
||||||
|
,PiedPipingRelSlash
|
||||||
]
|
]
|
||||||
with (Grammar = GrammarHrv)
|
with (Grammar = GrammarHrv)
|
||||||
**
|
**
|
||||||
|
|||||||
@@ -89,6 +89,7 @@ lin
|
|||||||
|
|
||||||
NumCard c = c ;
|
NumCard c = c ;
|
||||||
NumDigits ds = ds ** {s = \\_,_ => ds.s} ;
|
NumDigits ds = ds ** {s = \\_,_ => ds.s} ;
|
||||||
|
NumDecimal dec = dec ** {s = \\_,_ => dec.s} ;
|
||||||
NumNumeral nu = {
|
NumNumeral nu = {
|
||||||
s = \\g,c => (adjFormsAdjective nu.s).s ! g ! Sg ! c ; ---- TODO Sg?
|
s = \\g,c => (adjFormsAdjective nu.s).s ! g ! Sg ! c ; ---- TODO Sg?
|
||||||
size = nu.size
|
size = nu.size
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
concrete NumeralHrv of Numeral =
|
concrete NumeralHrv of Numeral =
|
||||||
|
|
||||||
CatHrv [Numeral, Digits] **
|
CatHrv [Numeral, Digits, Decimal] **
|
||||||
|
|
||||||
open
|
open
|
||||||
ResHrv,
|
ResHrv,
|
||||||
@@ -125,6 +125,20 @@ oper mkThousand : Str -> NumSize -> Str = \attr,size ->
|
|||||||
|
|
||||||
IIDig d dd = {s = d.s ++ Predef.BIND ++ dd.s ; size = dd.size} ;
|
IIDig d dd = {s = d.s ++ Predef.BIND ++ dd.s ; size = dd.size} ;
|
||||||
|
|
||||||
|
PosDecimal d = d ** {hasDot=False} ;
|
||||||
|
NegDecimal d = {
|
||||||
|
s = "-" ++ Predef.BIND ++ d.s ;
|
||||||
|
size = d.size ;
|
||||||
|
hasDot=False
|
||||||
|
} ;
|
||||||
|
IFrac d i = {
|
||||||
|
s = d.s ++
|
||||||
|
if_then_Str d.hasDot BIND (BIND++"."++BIND) ++
|
||||||
|
i.s;
|
||||||
|
size = d.size ;
|
||||||
|
hasDot=True
|
||||||
|
} ;
|
||||||
|
|
||||||
D_0 = { s = "0" ; size = NS_1} ; ---- ??
|
D_0 = { s = "0" ; size = NS_1} ; ---- ??
|
||||||
D_1 = { s = "1" ; size = NS_1} ;
|
D_1 = { s = "1" ; size = NS_1} ;
|
||||||
D_2 = { s = "2" ; size = NS_2_4} ;
|
D_2 = { s = "2" ; size = NS_2_4} ;
|
||||||
|
|||||||
@@ -66,6 +66,7 @@ concrete CatCze of Cat =
|
|||||||
|
|
||||||
lincat Numeral = Determiner ; ---- TODO: should contain Ord as well
|
lincat Numeral = Determiner ; ---- TODO: should contain Ord as well
|
||||||
lincat Digits = {s:Str ; size : NumSize} ;
|
lincat Digits = {s:Str ; size : NumSize} ;
|
||||||
|
lincat Decimal = {s:Str ; size : NumSize ; hasDot : Bool} ;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,6 +25,8 @@ concrete ExtendCze of Extend = CatCze **
|
|||||||
,ComplBareVS
|
,ComplBareVS
|
||||||
,CompIQuant
|
,CompIQuant
|
||||||
,CompBareCN
|
,CompBareCN
|
||||||
|
,PiedPipingQuestSlash
|
||||||
|
,PiedPipingRelSlash
|
||||||
]
|
]
|
||||||
with (Grammar = GrammarCze)
|
with (Grammar = GrammarCze)
|
||||||
**
|
**
|
||||||
|
|||||||
@@ -96,6 +96,7 @@ lin
|
|||||||
|
|
||||||
NumCard c = c ;
|
NumCard c = c ;
|
||||||
NumDigits ds = ds ** {s = \\_,_ => ds.s} ;
|
NumDigits ds = ds ** {s = \\_,_ => ds.s} ;
|
||||||
|
NumDecimal ds = ds ** {s = \\_,_ => ds.s} ;
|
||||||
NumNumeral nu = nu ;
|
NumNumeral nu = nu ;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
concrete NumeralCze of Numeral =
|
concrete NumeralCze of Numeral =
|
||||||
|
|
||||||
CatCze [Numeral,Digits] **
|
CatCze [Numeral,Digits,Decimal] **
|
||||||
|
|
||||||
open
|
open
|
||||||
ResCze,
|
ResCze,
|
||||||
@@ -117,4 +117,18 @@ oper determinerStr : Determiner -> Str = \d -> d.s ! Masc Anim ! Nom ;
|
|||||||
D_8 = { s = "8" ; size = Num5} ;
|
D_8 = { s = "8" ; size = Num5} ;
|
||||||
D_9 = { s = "9" ; size = Num5} ;
|
D_9 = { s = "9" ; size = Num5} ;
|
||||||
|
|
||||||
|
PosDecimal d = d ** {hasDot=False} ;
|
||||||
|
NegDecimal d = {
|
||||||
|
s = "-" ++ Predef.BIND ++ d.s ;
|
||||||
|
size = Num5 ;
|
||||||
|
hasDot=False
|
||||||
|
} ;
|
||||||
|
IFrac d i = {
|
||||||
|
s = d.s ++
|
||||||
|
if_then_Str d.hasDot BIND (BIND++"."++BIND) ++
|
||||||
|
i.s ;
|
||||||
|
size = Num5 ;
|
||||||
|
hasDot=True
|
||||||
|
} ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
concrete NumeralDan of Numeral = CatDan [Numeral,Digits] ** open MorphoDan,Prelude in {
|
concrete NumeralDan of Numeral = CatDan [Numeral,Digits,Decimal] ** open MorphoDan,Prelude in {
|
||||||
flags coding=utf8 ;
|
flags coding=utf8 ;
|
||||||
|
|
||||||
|
|
||||||
@@ -67,6 +67,20 @@ lin n9 = mkTal "ni" "nitten" "halvfems" "niende" "halvfemsindstyvende" ;
|
|||||||
D_8 = mkDig "8" ;
|
D_8 = mkDig "8" ;
|
||||||
D_9 = mkDig "9" ;
|
D_9 = mkDig "9" ;
|
||||||
|
|
||||||
|
PosDecimal d = d ** {hasDot=False} ;
|
||||||
|
NegDecimal d = {
|
||||||
|
s = \\o => "-" ++ BIND ++ d.s ! o ;
|
||||||
|
n = Pl ;
|
||||||
|
hasDot=False
|
||||||
|
} ;
|
||||||
|
IFrac d i = {
|
||||||
|
s=\\o=>d.s ! NCard neutrum ++
|
||||||
|
if_then_Str d.hasDot BIND (BIND++"."++BIND) ++
|
||||||
|
i.s ! o;
|
||||||
|
hasDot=True;
|
||||||
|
n = Pl
|
||||||
|
} ;
|
||||||
|
|
||||||
oper
|
oper
|
||||||
mk2Dig : Str -> Str -> TDigit = \c,o -> mk3Dig c o Pl ;
|
mk2Dig : Str -> Str -> TDigit = \c,o -> mk3Dig c o Pl ;
|
||||||
mkDig : Str -> TDigit = \c -> mk2Dig c (c + ":e") ;
|
mkDig : Str -> TDigit = \c -> mk2Dig c (c + ":e") ;
|
||||||
|
|||||||
@@ -59,6 +59,7 @@ concrete CatDut of Cat =
|
|||||||
|
|
||||||
Numeral = {s : CardOrd => Str ; n : Number } ;
|
Numeral = {s : CardOrd => Str ; n : Number } ;
|
||||||
Digits = {s : CardOrd => Str ; n : Number } ;
|
Digits = {s : CardOrd => Str ; n : Number } ;
|
||||||
|
Decimal = {s : CardOrd => Str ; n : Number ; hasDot : Bool} ;
|
||||||
|
|
||||||
-- Structural
|
-- Structural
|
||||||
|
|
||||||
@@ -81,6 +82,9 @@ concrete CatDut of Cat =
|
|||||||
N = Noun ;
|
N = Noun ;
|
||||||
N2 = {s : NForm => Str ; g : Gender} ** {c2 : Preposition} ;
|
N2 = {s : NForm => Str ; g : Gender} ** {c2 : Preposition} ;
|
||||||
N3 = {s : NForm => Str ; g : Gender} ** {c2,c3 : Preposition} ;
|
N3 = {s : NForm => Str ; g : Gender} ** {c2,c3 : Preposition} ;
|
||||||
GN, SN, PN = {s : NPCase => Str} ;
|
PN = {s : NPCase => Str} ;
|
||||||
|
GN = {s : NPCase => Str; g : Sex} ;
|
||||||
|
SN = {s : Sex => NPCase => Str; pl : NPCase => Str} ;
|
||||||
|
LN = {s : Adjf => NPCase => Str ; hasArt : Bool ; n : Number} ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,6 +36,30 @@ lin
|
|||||||
)
|
)
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
InflectionPN = \pn -> {
|
||||||
|
t = "pn" ;
|
||||||
|
s1 = heading1 "Naam" ;
|
||||||
|
s2 = paragraph (pn.s ! NPNom)
|
||||||
|
} ;
|
||||||
|
|
||||||
|
InflectionLN = \ln -> {
|
||||||
|
t = "pn" ;
|
||||||
|
s1 = heading1 "Naam" ;
|
||||||
|
s2 = paragraph (ln.s ! Strong ! NPNom)
|
||||||
|
} ;
|
||||||
|
|
||||||
|
InflectionGN = \pn -> {
|
||||||
|
t = "vnm" ;
|
||||||
|
s1 = heading1 "Voornaam" ;
|
||||||
|
s2 = paragraph (pn.s ! NPNom)
|
||||||
|
} ;
|
||||||
|
|
||||||
|
InflectionSN = \pn -> {
|
||||||
|
t = "van" ;
|
||||||
|
s1 = heading1 "Van" ;
|
||||||
|
s2 = paragraph (pn.s ! Male ! NPNom)
|
||||||
|
} ;
|
||||||
|
|
||||||
InflectionA, InflectionA2 = \adj ->
|
InflectionA, InflectionA2 = \adj ->
|
||||||
let
|
let
|
||||||
gforms : AForm -> Str = \a ->
|
gforms : AForm -> Str = \a ->
|
||||||
@@ -61,7 +85,7 @@ lin
|
|||||||
|
|
||||||
InflectionAdv, InflectionAdV, InflectionAdA, InflectionAdN = \adv -> {
|
InflectionAdv, InflectionAdV, InflectionAdA, InflectionAdN = \adv -> {
|
||||||
t = "adv" ;
|
t = "adv" ;
|
||||||
s1 = heading1 (heading preposition_Category) ;
|
s1 = heading1 "Bijwoord" ;
|
||||||
s2 = paragraph adv.s
|
s2 = paragraph adv.s
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,8 @@ concrete ExtendDut of Extend =
|
|||||||
- [PastPartAP,ICompAP,IAdvAdv,
|
- [PastPartAP,ICompAP,IAdvAdv,
|
||||||
VPS,
|
VPS,
|
||||||
BaseVPS, ConsVPS,
|
BaseVPS, ConsVPS,
|
||||||
MkVPS, ConjVPS, PredVPS
|
MkVPS, ConjVPS, PredVPS,
|
||||||
|
PassVPSlash, PassAgentVPSlash
|
||||||
]
|
]
|
||||||
with
|
with
|
||||||
(Grammar = GrammarDut) **
|
(Grammar = GrammarDut) **
|
||||||
@@ -102,6 +103,11 @@ lin
|
|||||||
|
|
||||||
IAdvAdv adv = {s = "hoe" ++ adv.s} ;
|
IAdvAdv adv = {s = "hoe" ++ adv.s} ;
|
||||||
|
|
||||||
|
lin PassVPSlash vps =
|
||||||
|
insertInf (vps.s.s ! VPerf APred) (predV ResDut.worden_V) ;
|
||||||
|
PassAgentVPSlash vps np =
|
||||||
|
insertAdv (appPrep (mkPrep "door") np) (insertInf (vps.s.s ! VPerf APred) (predV ResDut.worden_V)) ;
|
||||||
|
|
||||||
lin
|
lin
|
||||||
UseDAP dap = dap ** {
|
UseDAP dap = dap ** {
|
||||||
s = \\_ => dap.sp ! Neutr ;
|
s = \\_ => dap.sp ! Neutr ;
|
||||||
@@ -115,9 +121,4 @@ lin
|
|||||||
isPron = False
|
isPron = False
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
lin GivenName, MaleSurname, FemaleSurname = \n -> n ;
|
|
||||||
lin FullName gn sn = {
|
|
||||||
s = \\c => gn.s ! NPNom ++ sn.s ! c
|
|
||||||
} ;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,4 +14,5 @@ concrete GrammarDut of Grammar =
|
|||||||
TextX,
|
TextX,
|
||||||
IdiomDut,
|
IdiomDut,
|
||||||
StructuralDut,
|
StructuralDut,
|
||||||
TenseX ;
|
TenseX,
|
||||||
|
NamesDut ;
|
||||||
|
|||||||
43
src/dutch/NamesDut.gf
Normal file
43
src/dutch/NamesDut.gf
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
concrete NamesDut of Names = CatDut ** open Prelude, ResDut in {
|
||||||
|
|
||||||
|
lin GivenName = \n -> noMerge ** {s = n.s ; a = agrP3 Sg ; isPron = False} ;
|
||||||
|
lin MaleSurname = \n -> noMerge ** {s = n.s ! Male ; a = agrP3 Sg ; isPron = False} ;
|
||||||
|
lin FemaleSurname = \n -> noMerge ** {s = n.s ! Female; a = agrP3 Sg ; isPron = False} ;
|
||||||
|
lin PlSurname = \n -> noMerge ** {s = n.pl ; a = agrP3 Sg ; isPron = False} ;
|
||||||
|
lin FullName gn sn =
|
||||||
|
noMerge ** {s = \\c => gn.s ! NPNom ++ sn.s ! gn.g ! c ; a = agrP3 Sg ; isPron = False} ;
|
||||||
|
|
||||||
|
lin UseLN ln = noMerge ** {
|
||||||
|
s = \\c => case ln.hasArt of {
|
||||||
|
True => "de" ++ ln.s ! Weak ! c ;
|
||||||
|
False => ln.s ! Strong ! c
|
||||||
|
} ;
|
||||||
|
a = agrP3 ln.n ;
|
||||||
|
isPron = False
|
||||||
|
} ;
|
||||||
|
|
||||||
|
lin PlainLN ln = noMerge ** {
|
||||||
|
s = \\c => ln.s ! Strong ! c ;
|
||||||
|
a = agrP3 ln.n ;
|
||||||
|
isPron = False
|
||||||
|
} ;
|
||||||
|
|
||||||
|
lin InLN ln = {
|
||||||
|
s = "in" ++ case ln.hasArt of {
|
||||||
|
True => "de" ++ ln.s ! Weak ! NPAcc ;
|
||||||
|
False => ln.s ! Strong ! NPAcc
|
||||||
|
}
|
||||||
|
} ;
|
||||||
|
|
||||||
|
lin AdjLN ap ln = ln ** {
|
||||||
|
s = \\a,c =>
|
||||||
|
let gan : Gender*Adjf*NForm = case ap.isPre of {
|
||||||
|
True => <Utr,a,NF ln.n Nom> ;
|
||||||
|
False => <Neutr,Strong,NF Sg Nom> } ;
|
||||||
|
af = agrAdj gan.p1 gan.p2 gan.p3 ;
|
||||||
|
in preOrPost ap.isPre
|
||||||
|
(ap.s ! agrP3 Sg ! af)
|
||||||
|
(ln.s ! a ! c) ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -85,6 +85,8 @@ concrete NounDut of Noun = CatDut ** open ResDut, Prelude in {
|
|||||||
NumDigits numeral = {s = \\g,c => numeral.s ! NCard g c; n = numeral.n } ;
|
NumDigits numeral = {s = \\g,c => numeral.s ! NCard g c; n = numeral.n } ;
|
||||||
OrdDigits numeral = {s = \\af => numeral.s ! NOrd af} ;
|
OrdDigits numeral = {s = \\af => numeral.s ! NOrd af} ;
|
||||||
|
|
||||||
|
NumDecimal numeral = {s = \\g,c => numeral.s ! NCard g c; n = numeral.n } ;
|
||||||
|
|
||||||
NumNumeral numeral = {s = \\g,c => numeral.s ! NCard g c; n = numeral.n } ;
|
NumNumeral numeral = {s = \\g,c => numeral.s ! NCard g c; n = numeral.n } ;
|
||||||
OrdNumeral numeral = {s = let tiende : AForm => Str = \\af => numeral.s ! NOrd af
|
OrdNumeral numeral = {s = let tiende : AForm => Str = \\af => numeral.s ! NOrd af
|
||||||
in table {APred => tiende ! AAttr Utr ;
|
in table {APred => tiende ! AAttr Utr ;
|
||||||
@@ -199,4 +201,10 @@ concrete NounDut of Noun = CatDut ** open ResDut, Prelude in {
|
|||||||
|
|
||||||
DetDAP det = det ;
|
DetDAP det = det ;
|
||||||
|
|
||||||
|
QuantityNP n m = noMerge ** {
|
||||||
|
s = \\c => preOrPost m.isPre m.s (n.s ! NCard Utr Nom) ;
|
||||||
|
a = agrP3 n.n ;
|
||||||
|
isPron = False
|
||||||
|
} ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
concrete NumeralDut of Numeral = CatDut [Numeral,Digits] ** open ResDut, Prelude in {
|
concrete NumeralDut of Numeral = CatDut [Numeral,Digits,Decimal] ** open ResDut, Prelude in {
|
||||||
|
|
||||||
flags optimize = all_subs ;
|
flags optimize = all_subs ;
|
||||||
coding=utf8 ;
|
coding=utf8 ;
|
||||||
@@ -74,6 +74,20 @@ lin
|
|||||||
D_8 = mkDig "8" ;
|
D_8 = mkDig "8" ;
|
||||||
D_9 = mkDig "9" ;
|
D_9 = mkDig "9" ;
|
||||||
|
|
||||||
|
PosDecimal d = d ** {hasDot=False} ;
|
||||||
|
NegDecimal d = {
|
||||||
|
s = \\o => "-" ++ BIND ++ d.s ! o ;
|
||||||
|
n = Pl ;
|
||||||
|
hasDot=False
|
||||||
|
} ;
|
||||||
|
IFrac d i = {
|
||||||
|
s = \\o => d.s ! invNum ++
|
||||||
|
if_then_Str d.hasDot BIND (BIND++"."++BIND) ++
|
||||||
|
i.s ! o ;
|
||||||
|
n = Pl ;
|
||||||
|
hasDot=True
|
||||||
|
} ;
|
||||||
|
|
||||||
oper
|
oper
|
||||||
mk2Dig : Str -> Str -> TDigit = \c,o -> mk3Dig c o Pl ;
|
mk2Dig : Str -> Str -> TDigit = \c,o -> mk3Dig c o Pl ;
|
||||||
mkDig : Str -> TDigit = \c -> mk2Dig c (c + "e") ;
|
mkDig : Str -> TDigit = \c -> mk2Dig c (c + "e") ;
|
||||||
|
|||||||
@@ -76,6 +76,24 @@ oper
|
|||||||
mkPN : N -> PN ; -- proper name from noun
|
mkPN : N -> PN ; -- proper name from noun
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
mkGN = overload { -- given name
|
||||||
|
mkGN : Str -> GN = \s -> lin GN {s = \\_ => s; g = Male} ;
|
||||||
|
mkGN : Str -> Sex -> GN = \s,g -> lin GN {s = \\_ => s; g = g} ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
mkSN = overload { -- given name
|
||||||
|
mkSN : Str -> SN = \s -> lin SN {s = \\_,_ => s; pl = \\_=>s} ;
|
||||||
|
mkSN : Str -> Str -> Str -> SN = \male,female,pl -> lin SN {s = table {Male=>\\_=>male; Female=>\\_=>female}; pl=\\_=>pl} ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
mkLN = overload {
|
||||||
|
mkLN : Str -> LN -- location name
|
||||||
|
= \s -> lin LN {s = \\_,_ => s; hasArt = False; n = Sg} ;
|
||||||
|
mkLN : Str -> Number -> LN -- location name
|
||||||
|
= \s,n -> lin LN {s = \\_,_ => s; hasArt = False; n = n} ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
defLN : LN -> LN = \n -> n ** {hasArt = True} ;
|
||||||
|
|
||||||
--2 Adjectives
|
--2 Adjectives
|
||||||
|
|
||||||
@@ -249,6 +267,10 @@ oper
|
|||||||
de,utrum = Utr ;
|
de,utrum = Utr ;
|
||||||
nominative = Nom ;
|
nominative = Nom ;
|
||||||
genitive = Gen ;
|
genitive = Gen ;
|
||||||
|
male = Male ;
|
||||||
|
female = Female ;
|
||||||
|
singular = Sg ;
|
||||||
|
plural = Pl ;
|
||||||
|
|
||||||
mkA = overload {
|
mkA = overload {
|
||||||
mkA : (vers : Str) -> A = \a -> lin A (regAdjective a) ;
|
mkA : (vers : Str) -> A = \a -> lin A (regAdjective a) ;
|
||||||
@@ -439,4 +461,6 @@ oper
|
|||||||
--
|
--
|
||||||
--}
|
--}
|
||||||
|
|
||||||
|
mkMU : Str -> MU = \s -> lin MU {s=s; isPre=False} ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -71,6 +71,20 @@ lin pot3plus n m = { s = table {
|
|||||||
D_8 = mkDig "8" ;
|
D_8 = mkDig "8" ;
|
||||||
D_9 = mkDig "9" ;
|
D_9 = mkDig "9" ;
|
||||||
|
|
||||||
|
PosDecimal d = d ** {hasDot=False} ;
|
||||||
|
NegDecimal d = {
|
||||||
|
s = \\o,g => "-" ++ BIND ++ d.s ! o ! g ;
|
||||||
|
n = Pl
|
||||||
|
hasDot=False
|
||||||
|
} ;
|
||||||
|
IFrac d i = {
|
||||||
|
s = \\o,g => d.s ! NCard ! g ++
|
||||||
|
if_then_Str d.hasDot BIND (BIND++"."++BIND) ++
|
||||||
|
i.s ! o ! g;
|
||||||
|
n = Pl ;
|
||||||
|
hasDot=True
|
||||||
|
} ;
|
||||||
|
|
||||||
oper
|
oper
|
||||||
mk2Dig : Str -> Str -> TDigit = \c,o -> mk3Dig c o Pl ;
|
mk2Dig : Str -> Str -> TDigit = \c,o -> mk3Dig c o Pl ;
|
||||||
mkDig : Str -> TDigit = \c -> mk2Dig c (c ) ;
|
mkDig : Str -> TDigit = \c -> mk2Dig c (c ) ;
|
||||||
|
|||||||
@@ -81,6 +81,7 @@ concrete CatEng of Cat = CommonX - [Pol,CAdv] ** open ResEng, Prelude in {
|
|||||||
|
|
||||||
Numeral = {s : Bool => CardOrd => Case => Str ; n : Number} ;
|
Numeral = {s : Bool => CardOrd => Case => Str ; n : Number} ;
|
||||||
Digits = {s : CardOrd => Case => Str ; n : Number ; tail : DTail} ;
|
Digits = {s : CardOrd => Case => Str ; n : Number ; tail : DTail} ;
|
||||||
|
Decimal = {s : CardOrd => Case => Str ; n : Number ; hasDot : Bool} ;
|
||||||
|
|
||||||
-- Structural
|
-- Structural
|
||||||
|
|
||||||
@@ -106,7 +107,14 @@ concrete CatEng of Cat = CommonX - [Pol,CAdv] ** open ResEng, Prelude in {
|
|||||||
N = {s : Number => Case => Str ; g : Gender} ;
|
N = {s : Number => Case => Str ; g : Gender} ;
|
||||||
N2 = {s : Number => Case => Str ; g : Gender} ** {c2 : Str} ;
|
N2 = {s : Number => Case => Str ; g : Gender} ** {c2 : Str} ;
|
||||||
N3 = {s : Number => Case => Str ; g : Gender} ** {c2,c3 : Str} ;
|
N3 = {s : Number => Case => Str ; g : Gender} ** {c2,c3 : Str} ;
|
||||||
GN, SN, PN = {s : Case => Str ; g : Gender} ;
|
PN = {s : Case => Str ; g : Gender} ;
|
||||||
|
GN = {s : Case => Str ; g : Sex} ;
|
||||||
|
SN = {s : Sex => Case => Str; p : Case => Str} ;
|
||||||
|
LN = {s : Case => Str;
|
||||||
|
prep : LNPrep; -- preposition "in Scandinavia", "on the Balkans", "at the South Pole"
|
||||||
|
art : Bool; -- plain name "United States" vs "the United States"
|
||||||
|
n : Number;
|
||||||
|
} ;
|
||||||
|
|
||||||
lindef
|
lindef
|
||||||
SSlash = \s -> {s = s; c2 = ""} ;
|
SSlash = \s -> {s = s; c2 = ""} ;
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user