forked from GitHub/gf-core
adjectives
This commit is contained in:
23
lib/resource-1.0/gf/Adjective.gf
Normal file
23
lib/resource-1.0/gf/Adjective.gf
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
abstract Adjective = Cat ** {
|
||||||
|
|
||||||
|
fun
|
||||||
|
|
||||||
|
PositA : A -> AP ;
|
||||||
|
ComparA : A -> NP -> AP ;
|
||||||
|
|
||||||
|
-- $SuperlA$ belongs to determiner syntax in $Noun$.
|
||||||
|
|
||||||
|
ComplA2 : A2 -> NP -> AP ;
|
||||||
|
|
||||||
|
SentAP : AP -> S -> AP ;
|
||||||
|
QuestAP : AP -> QS -> AP ;
|
||||||
|
|
||||||
|
AdAP : AdA -> AP -> AP ;
|
||||||
|
|
||||||
|
-- $AdvA$ that forms adverbs belongs to $Adverb$.
|
||||||
|
|
||||||
|
-- Elliptic constructions as usual.
|
||||||
|
|
||||||
|
UseA2 : A2 -> A ;
|
||||||
|
|
||||||
|
}
|
||||||
37
lib/resource-1.0/gf/AdjectiveEng.gf
Normal file
37
lib/resource-1.0/gf/AdjectiveEng.gf
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
concrete AdjectiveEng of Adjective = CatEng ** open ResEng, Prelude in {
|
||||||
|
|
||||||
|
lin
|
||||||
|
|
||||||
|
PositA a = {
|
||||||
|
s = a.s ! AAdj Posit ;
|
||||||
|
isPre = True
|
||||||
|
} ;
|
||||||
|
ComparA a np = {
|
||||||
|
s = a.s ! AAdj Compar ++ "than" ++ np.s ! Nom ;
|
||||||
|
isPre = False
|
||||||
|
} ;
|
||||||
|
|
||||||
|
-- $SuperlA$ belongs to determiner syntax in $Noun$.
|
||||||
|
|
||||||
|
ComplA2 a np = {
|
||||||
|
s = a.s ! AAdj Posit ++ a.c2 ++ np.s ! Acc ;
|
||||||
|
isPre = False
|
||||||
|
} ;
|
||||||
|
|
||||||
|
SentAP ap s = {
|
||||||
|
s = ap.s ++ conjThat ++ s.s ;
|
||||||
|
isPre = False
|
||||||
|
} ;
|
||||||
|
QuestAP ap qs = {
|
||||||
|
s = ap.s ++ qs.s ! QIndir ;
|
||||||
|
isPre = False
|
||||||
|
} ;
|
||||||
|
|
||||||
|
AdAP ada ap = {
|
||||||
|
s = ada.s ++ ap.s ;
|
||||||
|
isPre = ap.isPre
|
||||||
|
} ;
|
||||||
|
|
||||||
|
UseA2 a = a ;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -19,7 +19,13 @@ abstract Cat = {
|
|||||||
AP ;
|
AP ;
|
||||||
Comp ;
|
Comp ;
|
||||||
|
|
||||||
|
A ;
|
||||||
|
A2 ;
|
||||||
|
|
||||||
Adv ;
|
Adv ;
|
||||||
|
AdV ;
|
||||||
|
AdA ;
|
||||||
|
AdS ;
|
||||||
|
|
||||||
CN ;
|
CN ;
|
||||||
N ;
|
N ;
|
||||||
@@ -42,4 +48,6 @@ abstract Cat = {
|
|||||||
|
|
||||||
RP ;
|
RP ;
|
||||||
|
|
||||||
}
|
Numeral ;
|
||||||
|
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
concrete CatEng of Cat = open ResEng in {
|
concrete CatEng of Cat = open ResEng, Prelude in {
|
||||||
|
|
||||||
lincat
|
lincat
|
||||||
S = {s : Str} ;
|
S = {s : Str} ;
|
||||||
@@ -18,10 +18,13 @@ concrete CatEng of Cat = open ResEng in {
|
|||||||
V2, VV = Verb ** {c2 : Str} ;
|
V2, VV = Verb ** {c2 : Str} ;
|
||||||
V3 = Verb ** {c2, c3 : Str} ;
|
V3 = Verb ** {c2, c3 : Str} ;
|
||||||
|
|
||||||
AP = {s : Str} ;
|
AP = {s : Str ; isPre : Bool} ;
|
||||||
Comp = {s : Agr => Str} ;
|
Comp = {s : Agr => Str} ;
|
||||||
|
|
||||||
Adv = {s : Str} ;
|
A = {s : AForm => Str} ;
|
||||||
|
A2 = {s : AForm => Str ; c2 : Str} ;
|
||||||
|
|
||||||
|
Adv, AdV, AdA, AdS = {s : Str} ;
|
||||||
|
|
||||||
Det, Quant = {s : Str ; n : Number} ;
|
Det, Quant = {s : Str ; n : Number} ;
|
||||||
Predet, Num = {s : Str} ;
|
Predet, Num = {s : Str} ;
|
||||||
@@ -36,4 +39,6 @@ concrete CatEng of Cat = open ResEng in {
|
|||||||
IDet = {s : Str ; n : Number} ;
|
IDet = {s : Str ; n : Number} ;
|
||||||
IAdv = {s : Str} ;
|
IAdv = {s : Str} ;
|
||||||
|
|
||||||
|
Numeral = {s : CardOrd => Str ; n : Number} ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,17 +2,19 @@ abstract Lex = Cat ** {
|
|||||||
|
|
||||||
fun
|
fun
|
||||||
walk_V : V ;
|
walk_V : V ;
|
||||||
kill_V2 : V2 ;
|
help_V2 : V2 ;
|
||||||
show_V3 : V3 ;
|
show_V3 : V3 ;
|
||||||
want_VV : VV ;
|
want_VV : VV ;
|
||||||
claim_VS : VS ;
|
claim_VS : VS ;
|
||||||
ask_VQ : VQ ;
|
ask_VQ : VQ ;
|
||||||
|
|
||||||
big_AP : AP ;
|
|
||||||
dog_N : N ;
|
dog_N : N ;
|
||||||
son_N2 : N2 ;
|
son_N2 : N2 ;
|
||||||
way_N3 : N3 ;
|
way_N3 : N3 ;
|
||||||
|
|
||||||
|
warm_A : A ;
|
||||||
|
close_A2 : A2 ;
|
||||||
|
|
||||||
-- structural
|
-- structural
|
||||||
|
|
||||||
|
|
||||||
@@ -30,4 +32,6 @@ abstract Lex = Cat ** {
|
|||||||
whichSg_IDet, whichPl_IDet : IDet ;
|
whichSg_IDet, whichPl_IDet : IDet ;
|
||||||
|
|
||||||
here_Adv : Adv ;
|
here_Adv : Adv ;
|
||||||
|
|
||||||
|
very_AdA : AdA ;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,19 +1,22 @@
|
|||||||
concrete LexEng of Lex = CatEng ** open ResEng in {
|
concrete LexEng of Lex = CatEng ** open ResEng, Prelude in {
|
||||||
|
|
||||||
lin
|
lin
|
||||||
walk_V = regV "walk" ;
|
walk_V = regV "walk" ;
|
||||||
kill_V2 = regV "kill" ** {c2 = []} ;
|
help_V2 = regV "help" ** {c2 = []} ;
|
||||||
show_V3 = regV "show" ** {c2 = [] ; c3 = "to"} ;
|
show_V3 = regV "show" ** {c2 = [] ; c3 = "to"} ;
|
||||||
want_VV = regV "want" ** {c2 = "to"} ;
|
want_VV = regV "want" ** {c2 = "to"} ;
|
||||||
claim_VS = regV "claim" ;
|
claim_VS = regV "claim" ;
|
||||||
ask_VQ = regV "ask" ;
|
ask_VQ = regV "ask" ;
|
||||||
|
|
||||||
big_AP = {s = "big"} ;
|
|
||||||
dog_N = regN "dog" ;
|
dog_N = regN "dog" ;
|
||||||
son_N2 = regN "son" ** {c2 = "of"} ;
|
son_N2 = regN "son" ** {c2 = "of"} ;
|
||||||
way_N3 = regN "way" ** {c2 = "from" ; c3 = "to"} ;
|
way_N3 = regN "way" ** {c2 = "from" ; c3 = "to"} ;
|
||||||
|
|
||||||
|
warm_A = regA "warm" ;
|
||||||
|
close_A2 = regA "close" ** {c2 = "to"} ;
|
||||||
|
|
||||||
here_Adv = {s = "here"} ;
|
here_Adv = {s = "here"} ;
|
||||||
|
very_AdA = {s = "very"} ;
|
||||||
|
|
||||||
only_Predet = {s = "only"} ;
|
only_Predet = {s = "only"} ;
|
||||||
this_Quant = {s = "this" ; n = Sg} ;
|
this_Quant = {s = "this" ; n = Sg} ;
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
--1 The construction of nouns, noun phrases, and determiners
|
||||||
|
|
||||||
abstract Noun = Cat ** {
|
abstract Noun = Cat ** {
|
||||||
|
|
||||||
fun
|
fun
|
||||||
@@ -12,15 +14,16 @@ abstract Noun = Cat ** {
|
|||||||
NoNum : Num ;
|
NoNum : Num ;
|
||||||
NumInt : Int -> Num ;
|
NumInt : Int -> Num ;
|
||||||
|
|
||||||
|
CardNumeral : Numeral -> Num ;
|
||||||
|
OrdNumeral : Numeral -> Num ;
|
||||||
|
|
||||||
|
NumSuperl : A -> Num ;
|
||||||
|
|
||||||
NoPredet : Predet ;
|
NoPredet : Predet ;
|
||||||
|
|
||||||
DefSg, DefPl : Quant ;
|
DefSg, DefPl : Quant ;
|
||||||
IndefSg, IndefPl : Quant ;
|
IndefSg, IndefPl : Quant ;
|
||||||
|
|
||||||
|
|
||||||
-- Num_Pl ::= Ordinal ;
|
|
||||||
-- Num_Pl ::= Numeral ;
|
|
||||||
|
|
||||||
ComplN2 : N2 -> NP -> CN ;
|
ComplN2 : N2 -> NP -> CN ;
|
||||||
ComplN3 : N3 -> NP -> N2 ;
|
ComplN3 : N3 -> NP -> N2 ;
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
concrete NounEng of Noun = CatEng ** open ResEng in {
|
concrete NounEng of Noun = CatEng ** open ResEng, Prelude in {
|
||||||
|
|
||||||
flags optimize=all_subs ;
|
flags optimize=all_subs ;
|
||||||
|
|
||||||
@@ -18,16 +18,25 @@ concrete NounEng of Noun = CatEng ** open ResEng in {
|
|||||||
NoNum, NoPredet = {s = []} ;
|
NoNum, NoPredet = {s = []} ;
|
||||||
NumInt n = n ;
|
NumInt n = n ;
|
||||||
|
|
||||||
|
CardNumeral numeral = {s = numeral.s ! NCard} ;
|
||||||
|
OrdNumeral numeral = {s = numeral.s ! NOrd} ;
|
||||||
|
|
||||||
|
NumSuperl a = {s = a.s ! AAdj Superl} ;
|
||||||
|
|
||||||
DefSg = {s = "the" ; n = Sg} ;
|
DefSg = {s = "the" ; n = Sg} ;
|
||||||
DefPl = {s = "the" ; n = Pl} ;
|
DefPl = {s = "the" ; n = Pl} ;
|
||||||
|
|
||||||
IndefSg = {s = "a" ; n = Sg} ;
|
IndefSg = {s = "a" ; n = Sg} ;
|
||||||
IndefPl = {s = [] ; n = Pl} ;
|
IndefPl = {s = [] ; n = Pl} ;
|
||||||
|
|
||||||
UseN n = n ;
|
|
||||||
|
|
||||||
ComplN2 f x = {s = \\n,c => f.s ! n ! Nom ++ f.c2 ++ x.s ! c} ;
|
ComplN2 f x = {s = \\n,c => f.s ! n ! Nom ++ f.c2 ++ x.s ! c} ;
|
||||||
ComplN3 f x = {s = \\n,c => f.s ! n ! Nom ++ f.c2 ++ x.s ! c ; c2 = f.c3} ;
|
ComplN3 f x = {s = \\n,c => f.s ! n ! Nom ++ f.c2 ++ x.s ! c ; c2 = f.c3} ;
|
||||||
|
|
||||||
|
AdjCN ap cn = {s = \\n,c => preOrPost ap.isPre ap.s (cn.s ! n ! c)} ;
|
||||||
|
|
||||||
|
SentCN cn s = {s = \\n,c => cn.s ! n ! c ++ conjThat ++ s.s} ;
|
||||||
|
QuestCN cn qs = {s = \\n,c => cn.s ! n ! c ++ qs.s ! QIndir} ;
|
||||||
|
|
||||||
|
UseN n = n ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
31
lib/resource-1.0/gf/Numeral.gf
Normal file
31
lib/resource-1.0/gf/Numeral.gf
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
-- numerals from 1 to 999999 in decimal notation
|
||||||
|
|
||||||
|
abstract Numeral = Cat ** {
|
||||||
|
|
||||||
|
cat
|
||||||
|
Digit ; -- 2..9
|
||||||
|
Sub10 ; -- 1..9
|
||||||
|
Sub100 ; -- 1..99
|
||||||
|
Sub1000 ; -- 1..999
|
||||||
|
Sub1000000 ; -- 1..999999
|
||||||
|
|
||||||
|
fun
|
||||||
|
num : Sub1000000 -> Numeral ;
|
||||||
|
|
||||||
|
n2, n3, n4, n5, n6, n7, n8, n9 : Digit ;
|
||||||
|
|
||||||
|
pot01 : Sub10 ; -- 1
|
||||||
|
pot0 : Digit -> Sub10 ; -- d * 1
|
||||||
|
pot110 : Sub100 ; -- 10
|
||||||
|
pot111 : Sub100 ; -- 11
|
||||||
|
pot1to19 : Digit -> Sub100 ; -- 10 + d
|
||||||
|
pot0as1 : Sub10 -> Sub100 ; -- coercion of 1..9
|
||||||
|
pot1 : Digit -> Sub100 ; -- d * 10
|
||||||
|
pot1plus : Digit -> Sub10 -> Sub100 ; -- d * 10 + n
|
||||||
|
pot1as2 : Sub100 -> Sub1000 ; -- coercion of 1..99
|
||||||
|
pot2 : Sub10 -> Sub1000 ; -- m * 100
|
||||||
|
pot2plus : Sub10 -> Sub100 -> Sub1000 ; -- m * 100 + n
|
||||||
|
pot2as3 : Sub1000 -> Sub1000000 ; -- coercion of 1..999
|
||||||
|
pot3 : Sub1000 -> Sub1000000 ; -- m * 1000
|
||||||
|
pot3plus : Sub1000 -> Sub1000 -> Sub1000000 ; -- m * 1000 + n
|
||||||
|
}
|
||||||
44
lib/resource-1.0/gf/NumeralEng.gf
Normal file
44
lib/resource-1.0/gf/NumeralEng.gf
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
concrete NumeralEng of Numeral = CatEng ** open ResEng in {
|
||||||
|
|
||||||
|
lincat
|
||||||
|
Digit = {s : DForm => CardOrd => Str} ;
|
||||||
|
Sub10 = {s : DForm => CardOrd => Str ; n : Number} ;
|
||||||
|
Sub100 = {s : CardOrd => Str ; n : Number} ;
|
||||||
|
Sub1000 = {s : CardOrd => Str ; n : Number} ;
|
||||||
|
Sub1000000 = {s : CardOrd => Str ; n : Number} ;
|
||||||
|
|
||||||
|
lin num x = x ;
|
||||||
|
lin n2 = let two = mkNum "two" "twelve" "twenty" "second" in
|
||||||
|
{s = \\f,c => case <f,c> of {
|
||||||
|
<teen,NOrd> => "twelfth" ;
|
||||||
|
_ => two.s ! f ! c
|
||||||
|
}
|
||||||
|
} ;
|
||||||
|
|
||||||
|
lin n3 = mkNum "three" "thirteen" "thirty" "third" ;
|
||||||
|
lin n4 = mkNum "four" "fourteen" "forty" "fourth" ;
|
||||||
|
lin n5 = mkNum "five" "fifteen" "fifty" "fifth" ;
|
||||||
|
lin n6 = regNum "six" ;
|
||||||
|
lin n7 = regNum "seven" ;
|
||||||
|
lin n8 = mkNum "eight" "eighteen" "eighty" "eighth" ;
|
||||||
|
lin n9 = regNum "nine" ;
|
||||||
|
|
||||||
|
lin pot01 = mkNum "one" "eleven" "ten" "first" ** {n = Sg} ;
|
||||||
|
lin pot0 d = d ** {n = Pl} ;
|
||||||
|
lin pot110 = regCardOrd "ten" ** {n = Pl} ;
|
||||||
|
lin pot111 = regCardOrd "eleven" ** {n = Pl} ;
|
||||||
|
lin pot1to19 d = {s = d.s ! teen} ** {n = Pl} ;
|
||||||
|
lin pot0as1 n = {s = n.s ! unit} ** {n = n.n} ;
|
||||||
|
lin pot1 d = {s = d.s ! ten} ** {n = Pl} ;
|
||||||
|
lin pot1plus d e = {
|
||||||
|
s = \\c => d.s ! ten ! NCard ++ "-" ++ e.s ! unit ! c ; n = Pl} ;
|
||||||
|
lin pot1as2 n = n ;
|
||||||
|
lin pot2 d = {s = \\c => d.s ! unit ! NCard ++ mkCard c "hundred"} ** {n = Pl} ;
|
||||||
|
lin pot2plus d e = {
|
||||||
|
s = \\c => d.s ! unit ! NCard ++ "hundred" ++ "and" ++ e.s ! c ; n = Pl} ;
|
||||||
|
lin pot2as3 n = n ;
|
||||||
|
lin pot3 n = {
|
||||||
|
s = \\c => n.s ! NCard ++ mkCard c "thousand" ; n = Pl} ;
|
||||||
|
lin pot3plus n m = {
|
||||||
|
s = \\c => n.s ! NCard ++ "thousand" ++ m.s ! c ; n = Pl} ;
|
||||||
|
}
|
||||||
@@ -3,10 +3,11 @@ resource ParamX = {
|
|||||||
param
|
param
|
||||||
Number = Sg | Pl ;
|
Number = Sg | Pl ;
|
||||||
Person = P1 | P2 | P3 ;
|
Person = P1 | P2 | P3 ;
|
||||||
|
Degree = Posit | Compar | Superl ;
|
||||||
|
|
||||||
Anteriority = Simul | Anter ;
|
Anteriority = Simul | Anter ;
|
||||||
Tense = Pres | Past | Fut | Cond ;
|
Tense = Pres | Past | Fut | Cond ;
|
||||||
Polarity = Pos | Neg ;
|
Polarity = Pos | Neg ;
|
||||||
|
|
||||||
QForm = QDir | QIndir ;
|
QForm = QDir | QIndir ;
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
resource ResEng = ParamX ** {
|
resource ResEng = ParamX ** open Prelude in {
|
||||||
|
|
||||||
param
|
param
|
||||||
|
|
||||||
@@ -161,4 +161,48 @@ resource ResEng = ParamX ** {
|
|||||||
|
|
||||||
conjThat : Str = "that" ;
|
conjThat : Str = "that" ;
|
||||||
|
|
||||||
|
-- For $Adjective$.
|
||||||
|
|
||||||
|
param
|
||||||
|
AForm = AAdj Degree | AAdv ;
|
||||||
|
|
||||||
|
oper
|
||||||
|
regA : Str -> {s : AForm => Str} = \warm -> {
|
||||||
|
s = table {
|
||||||
|
AAdj Posit => warm ;
|
||||||
|
AAdj Compar => warm + "er" ;
|
||||||
|
AAdj Superl => warm + "est" ;
|
||||||
|
AAdv => warm + "ly"
|
||||||
|
}
|
||||||
|
} ;
|
||||||
|
|
||||||
|
-- For $Numeral$.
|
||||||
|
|
||||||
|
param
|
||||||
|
DForm = unit | teen | ten ;
|
||||||
|
CardOrd = NCard | NOrd ;
|
||||||
|
|
||||||
|
oper
|
||||||
|
mkNum : Str -> Str -> Str -> Str -> {s : DForm => CardOrd => Str} =
|
||||||
|
\two -> \twelve -> \twenty -> \second ->
|
||||||
|
{s = table {
|
||||||
|
unit => table {NCard => two ; NOrd => second} ;
|
||||||
|
teen => \\c => mkCard c twelve ;
|
||||||
|
ten => \\c => mkCard c twenty
|
||||||
|
}
|
||||||
|
} ;
|
||||||
|
|
||||||
|
regNum : Str -> {s : DForm => CardOrd => Str} =
|
||||||
|
\six -> mkNum six (six + "teen") (six + "ty") (regOrd six) ;
|
||||||
|
|
||||||
|
regCardOrd : Str -> {s : CardOrd => Str} = \ten ->
|
||||||
|
{s = table {NCard => ten ; NOrd => regOrd ten}} ;
|
||||||
|
|
||||||
|
mkCard : CardOrd -> Str -> Str = \c,ten -> (regCardOrd ten).s ! c ;
|
||||||
|
|
||||||
|
regOrd : Str -> Str = \ten -> case last ten of {
|
||||||
|
"y" => init ten + "ieth" ;
|
||||||
|
_ => ten + "th"
|
||||||
|
} ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
abstract Test =
|
abstract Test =
|
||||||
Noun,
|
Noun,
|
||||||
Verb,
|
Verb,
|
||||||
|
Adjective,
|
||||||
|
Numeral,
|
||||||
Sentence,
|
Sentence,
|
||||||
Question,
|
Question,
|
||||||
Untensed,
|
Untensed,
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
|
--# -path=.:prelude
|
||||||
|
|
||||||
concrete TestEng of Test =
|
concrete TestEng of Test =
|
||||||
NounEng,
|
NounEng,
|
||||||
VerbEng,
|
VerbEng,
|
||||||
|
AdjectiveEng,
|
||||||
|
NumeralEng,
|
||||||
SentenceEng,
|
SentenceEng,
|
||||||
QuestionEng,
|
QuestionEng,
|
||||||
UntensedEng,
|
UntensedEng,
|
||||||
|
|||||||
Reference in New Issue
Block a user