mirror of
https://github.com/GrammaticalFramework/gf-rgl.git
synced 2026-06-12 08:30:12 -06:00
123 lines
2.8 KiB
Plaintext
123 lines
2.8 KiB
Plaintext
--# -path=.:../abstract:../common:../../prelude
|
|
|
|
resource ResTur = ParamX ** open Prelude, Predef, HarmonyTur in {
|
|
|
|
--2 For $Noun$
|
|
|
|
flags
|
|
coding=utf8 ;
|
|
|
|
param
|
|
Case = Nom | Acc | Dat | Gen | Loc | Ablat | Abess Polarity ;
|
|
Species = Indef | Def ;
|
|
Contiguity = Con | Sep ; --Concatenate or Separate
|
|
|
|
oper
|
|
Agr = {n : Number ; p : Person} ;
|
|
Noun = {
|
|
s : Number => Case => Str ;
|
|
gen : Number => Agr => Str ;
|
|
h : Harmony
|
|
} ;
|
|
Pron = {s : Case => Str ;
|
|
h : Harmony;
|
|
a : Agr} ;
|
|
|
|
agrP3 : Number -> Agr ;
|
|
agrP3 n = {n = n; p = P3} ;
|
|
-- For $Adjective$
|
|
|
|
conjAgr : Agr -> Agr -> Agr = \a,b ->
|
|
{n=conjNumber a.n b.n; p=conjPerson a.p b.p} ;
|
|
|
|
oper
|
|
Adjective = Noun ** { adv : Str } ;
|
|
|
|
-- For $Verb$.
|
|
|
|
param
|
|
VForm =
|
|
VPres Agr
|
|
| VProg Agr
|
|
| VPast Agr
|
|
| VFuture Agr
|
|
| VImperative
|
|
| VInfinitive
|
|
| Gerund Number Case
|
|
| VNoun Number Case
|
|
;
|
|
|
|
param
|
|
ConjType = Infix | Mixfix ;
|
|
|
|
UseGen = NoGen | YesGen Agr | UseIndef ;
|
|
|
|
oper
|
|
Verb : Type = {
|
|
s : VForm => Str
|
|
} ;
|
|
|
|
--2 For $Numeral$
|
|
param
|
|
DForm = unit | ten ;
|
|
CardOrd = NCard | NOrd ;
|
|
|
|
oper
|
|
mkPron : (ben,beni,bana,banin,bende,benden,benli,bensiz:Str) -> Number -> Person -> Pron =
|
|
\ben,beni,bana,benim,bende,benden,benli,bensiz,n,p -> {
|
|
s = table {
|
|
Nom => ben ;
|
|
Acc => beni ;
|
|
Dat => bana ;
|
|
Gen => benim ;
|
|
Loc => bende ;
|
|
Ablat => benden ;
|
|
Abess Pos => benli ;
|
|
Abess Neg => bensiz
|
|
} ;
|
|
h = getHarmony ben ;
|
|
a = {n=n; p=p} ;
|
|
} ;
|
|
|
|
-- Prep
|
|
noPrep = mkPrep [] Nom;
|
|
|
|
mkPrep : Str -> Case -> {s : Str; c : Case; lock_Prep : {}} =
|
|
\s, c -> lin Prep {s=s; c=c};
|
|
|
|
mkNP : Noun -> Number -> Person -> {s : Case => Str; h : Harmony; a : Agr} =
|
|
\noun, n, p -> {
|
|
s = noun.s ! n;
|
|
h = noun.h;
|
|
a = {n = n; p = p}
|
|
} ;
|
|
|
|
mkClause : Str -> Agr -> Verb -> {s : Tense => Str; subord : Str} =
|
|
\np, a, v -> {
|
|
s = table {
|
|
Pres => np ++ v.s ! VPres a ;
|
|
Past => np ++ v.s ! VPast a ;
|
|
Fut => np ++ v.s ! VFuture a ;
|
|
Cond => "TODO"
|
|
} ;
|
|
subord = np ++ v.s ! VNoun a.n Nom
|
|
} ;
|
|
|
|
mkDet : Str -> Number -> UseGen -> {s : Str; n : Number; useGen : UseGen} =
|
|
\s, n, ug -> {s = s; n = n; useGen = ug} ;
|
|
|
|
attachMe : Verb -> {s : Str} =
|
|
\v ->
|
|
let
|
|
s : Str = v.s ! VImperative
|
|
in
|
|
case s of {
|
|
(_ + #vowel + _ )* + (_ + #frontVowel + _) => ss (s ++ "me") ;
|
|
(_ + #vowel + _)* + (_ + #backVowel + _) => ss (s ++ "ma")
|
|
} ;
|
|
|
|
linCoord : Str -> Ints 4 => Str ;
|
|
linCoord comma = table {0 => "hem"; 1=>"ya"; 2=>"ne"; 3=>comma; 4=>[]} ;
|
|
|
|
}
|