forked from GitHub/gf-core
Swedish functor implementation of Base
This commit is contained in:
@@ -11,13 +11,12 @@ domain = [0 .. 100]
|
||||
iS :: GS -> Prop
|
||||
iS s = case s of
|
||||
GPredAP np ap -> iNP np (iAP ap)
|
||||
GConjS c s t -> iConj c (iS s) (iS t)
|
||||
|
||||
iNP :: GNP -> (Ent -> Prop) -> Prop
|
||||
iNP np p = case np of
|
||||
GEvery cn -> all (\x -> not (iCN cn x) || p x) domain
|
||||
GSome cn -> any (\x -> iCN cn x && p x) domain
|
||||
GNone cn -> not (any (\x -> iCN cn x && p x) domain)
|
||||
GNone -> not (any (\x -> p x) domain)
|
||||
GMany pns -> and (map p (iListPN pns))
|
||||
GConjNP c np1 np2 -> iConj c (iNP np1 p) (iNP np2 p)
|
||||
GUsePN a -> p (iPN a)
|
||||
@@ -74,7 +73,7 @@ question2answer :: GQuestion -> GAnswer
|
||||
question2answer q = case iQuestion q of
|
||||
Left True -> GYes
|
||||
Left False -> GNo
|
||||
Right [] -> GValue (GNone GNumber)
|
||||
Right [] -> GValue GNone
|
||||
Right [v] -> GValue (GUsePN (ent2pn v))
|
||||
Right vs -> GValue (GMany (GListPN (map ent2pn vs)))
|
||||
|
||||
|
||||
@@ -19,14 +19,12 @@ fun
|
||||
|
||||
ModCN : AP -> CN -> CN ;
|
||||
|
||||
ConjS : Conj -> S -> S -> S ;
|
||||
ConjAP : Conj -> AP -> AP -> AP ;
|
||||
ConjNP : Conj -> NP -> NP -> NP ;
|
||||
|
||||
UsePN : PN -> NP ;
|
||||
Every : CN -> NP ;
|
||||
Some : CN -> NP ;
|
||||
None : CN -> NP ;
|
||||
|
||||
And, Or : Conj ;
|
||||
|
||||
@@ -55,6 +53,7 @@ fun
|
||||
No : Answer ;
|
||||
Value : NP -> Answer ;
|
||||
|
||||
None : NP ;
|
||||
Many : ListPN -> NP ;
|
||||
BasePN : PN -> PN -> ListPN ;
|
||||
ConsPN : PN -> ListPN -> ListPN ;
|
||||
|
||||
@@ -13,14 +13,12 @@ lin
|
||||
|
||||
ModCN = cc2 ;
|
||||
|
||||
ConjS c = infixSS c.s ;
|
||||
ConjAP c = infixSS c.s ;
|
||||
ConjNP c = infixSS c.s ;
|
||||
|
||||
UsePN a = a ;
|
||||
Every = prefixSS "every" ;
|
||||
Some = prefixSS "some" ;
|
||||
None = prefixSS "no" ;
|
||||
|
||||
And = ss "and" ;
|
||||
Or = ss "or" ;
|
||||
@@ -49,6 +47,7 @@ lin
|
||||
No = ss "no" ;
|
||||
|
||||
Value np = np ;
|
||||
None = ss "none" ;
|
||||
Many list = list ;
|
||||
|
||||
BasePN = infixSS "and" ;
|
||||
|
||||
@@ -6,7 +6,7 @@ flags lexer=literals ; unlexer=text ;
|
||||
lincat
|
||||
Question = G.Phr ;
|
||||
Answer = G.Phr ;
|
||||
S = Cl ;
|
||||
S = G.Cl ;
|
||||
NP = G.NP ;
|
||||
PN = G.NP ;
|
||||
CN = G.CN ;
|
||||
@@ -22,14 +22,12 @@ lin
|
||||
|
||||
ModCN = mkCN ;
|
||||
|
||||
--- ConjS = mkS ;
|
||||
ConjAP = mkAP ;
|
||||
ConjNP = mkNP ;
|
||||
|
||||
UsePN p = p ;
|
||||
Every = mkNP every_Det ;
|
||||
Some = mkNP someSg_Det ;
|
||||
--- None = mkNP noSg_Det ; ---
|
||||
|
||||
And = and_Conj ;
|
||||
Or = or_Conj ;
|
||||
@@ -48,7 +46,8 @@ lin
|
||||
|
||||
Sum = prefix sum_N2 ;
|
||||
Product = prefix product_N2 ;
|
||||
--- GCD = prefixSS ["the greatest common divisor of"] ;
|
||||
GCD nps = mkNP (mkDet (mkQuantSg defQuant) (mkOrd great_A))
|
||||
(mkCN common_A (mkCN divisor_N2 (mkNP and_Conj nps))) ;
|
||||
|
||||
WhatIs np = mkPhr (mkQS (mkQCl whatSg_IP (mkVP np))) ;
|
||||
WhichAre cn ap = mkPhr (mkQS (mkQCl (mkIP whichPl_IDet cn) (mkVP ap))) ;
|
||||
@@ -59,6 +58,7 @@ lin
|
||||
|
||||
Value np = mkPhr (mkUtt np) ;
|
||||
Many list = mkNP and_Conj list ;
|
||||
None = none_NP ;
|
||||
|
||||
BasePN = G.BaseNP ;
|
||||
ConsPN = G.ConsNP ;
|
||||
|
||||
8
examples/tutorial/semantics/BaseSwe.gf
Normal file
8
examples/tutorial/semantics/BaseSwe.gf
Normal file
@@ -0,0 +1,8 @@
|
||||
--# -path=.:prelude:present:api:mathematical
|
||||
|
||||
concrete BaseSwe of Base = BaseI with
|
||||
(Syntax = SyntaxSwe),
|
||||
(Grammar = GrammarSwe),
|
||||
(G = GrammarSwe),
|
||||
(Symbolic = SymbolicSwe),
|
||||
(LexBase = LexBaseSwe) ;
|
||||
@@ -83,7 +83,7 @@ data GNP =
|
||||
GConjNP GConj GNP GNP
|
||||
| GEvery GCN
|
||||
| GMany GListPN
|
||||
| GNone GCN
|
||||
| GNone
|
||||
| GSome GCN
|
||||
| GUsePN GPN
|
||||
deriving Show
|
||||
@@ -101,9 +101,7 @@ data GQuestion =
|
||||
| GWhichAre GCN GAP
|
||||
deriving Show
|
||||
|
||||
data GS =
|
||||
GConjS GConj GS GS
|
||||
| GPredAP GNP GAP
|
||||
data GS = GPredAP GNP GAP
|
||||
deriving Show
|
||||
|
||||
|
||||
@@ -141,7 +139,7 @@ instance Gf GNP where
|
||||
gf (GConjNP x1 x2 x3) = DTr [] (AC (CId "ConjNP")) [gf x1, gf x2, gf x3]
|
||||
gf (GEvery x1) = DTr [] (AC (CId "Every")) [gf x1]
|
||||
gf (GMany x1) = DTr [] (AC (CId "Many")) [gf x1]
|
||||
gf (GNone x1) = DTr [] (AC (CId "None")) [gf x1]
|
||||
gf GNone = DTr [] (AC (CId "None")) []
|
||||
gf (GSome x1) = DTr [] (AC (CId "Some")) [gf x1]
|
||||
gf (GUsePN x1) = DTr [] (AC (CId "UsePN")) [gf x1]
|
||||
|
||||
@@ -156,9 +154,7 @@ instance Gf GQuestion where
|
||||
gf (GWhatIs x1) = DTr [] (AC (CId "WhatIs")) [gf x1]
|
||||
gf (GWhichAre x1 x2) = DTr [] (AC (CId "WhichAre")) [gf x1, gf x2]
|
||||
|
||||
instance Gf GS where
|
||||
gf (GConjS x1 x2 x3) = DTr [] (AC (CId "ConjS")) [gf x1, gf x2, gf x3]
|
||||
gf (GPredAP x1 x2) = DTr [] (AC (CId "PredAP")) [gf x1, gf x2]
|
||||
instance Gf GS where gf (GPredAP x1 x2) = DTr [] (AC (CId "PredAP")) [gf x1, gf x2]
|
||||
|
||||
|
||||
instance Fg GA2 where
|
||||
@@ -215,7 +211,7 @@ instance Fg GNP where
|
||||
DTr [] (AC (CId "ConjNP")) [x1,x2,x3] -> GConjNP (fg x1) (fg x2) (fg x3)
|
||||
DTr [] (AC (CId "Every")) [x1] -> GEvery (fg x1)
|
||||
DTr [] (AC (CId "Many")) [x1] -> GMany (fg x1)
|
||||
DTr [] (AC (CId "None")) [x1] -> GNone (fg x1)
|
||||
DTr [] (AC (CId "None")) [] -> GNone
|
||||
DTr [] (AC (CId "Some")) [x1] -> GSome (fg x1)
|
||||
DTr [] (AC (CId "UsePN")) [x1] -> GUsePN (fg x1)
|
||||
_ -> error ("no NP " ++ show t)
|
||||
@@ -240,7 +236,6 @@ instance Fg GQuestion where
|
||||
instance Fg GS where
|
||||
fg t =
|
||||
case t of
|
||||
DTr [] (AC (CId "ConjS")) [x1,x2,x3] -> GConjS (fg x1) (fg x2) (fg x3)
|
||||
DTr [] (AC (CId "PredAP")) [x1,x2] -> GPredAP (fg x1) (fg x2)
|
||||
_ -> error ("no S " ++ show t)
|
||||
|
||||
|
||||
@@ -4,6 +4,8 @@ oper
|
||||
even_A : A ;
|
||||
odd_A : A ;
|
||||
prime_A : A ;
|
||||
common_A : A ;
|
||||
great_A : A ;
|
||||
equal_A2 : A2 ;
|
||||
greater_A2 : A2 ;
|
||||
smaller_A2 : A2 ;
|
||||
@@ -11,7 +13,7 @@ oper
|
||||
number_N : N ;
|
||||
sum_N2 : N2 ;
|
||||
product_N2 : N2 ;
|
||||
gcd_N2 : N2 ;
|
||||
divisor_N2 : N2 ;
|
||||
|
||||
noSg_Det : Det ;
|
||||
none_NP : NP ; ---
|
||||
}
|
||||
|
||||
@@ -4,14 +4,17 @@ oper
|
||||
even_A = mkA "even" ;
|
||||
odd_A = mkA "odd" ;
|
||||
prime_A = mkA "prime" ;
|
||||
great_A = mkA "great" ;
|
||||
common_A = mkA "common" ;
|
||||
equal_A2 = mkA2 (mkA "equal") (mkPrep "to") ;
|
||||
greater_A2 = mkA2 (mkA "greater") (mkPrep "than") ; ---
|
||||
smaller_A2 = mkA2 (mkA "smaller") (mkPrep "than") ; ---
|
||||
divisible_A2 = mkA2 (mkA "divisible") (mkPrep "by") ;
|
||||
number_N = mkN "number" ;
|
||||
sum_N2 = mkN2 (mkN "sum") (mkPrep "of") ;
|
||||
-- product_N2 : N2 ;
|
||||
-- gcd_N2 : N2 ;
|
||||
product_N2 = mkN2 (mkN "product") (mkPrep "of") ;
|
||||
divisor_N2 = mkN2 (mkN "divisor") (mkPrep "of") ;
|
||||
|
||||
none_NP = mkNP (mkPN "none") ; ---
|
||||
|
||||
-- noSg_Det : Det ;
|
||||
}
|
||||
|
||||
22
examples/tutorial/semantics/LexBaseSwe.gf
Normal file
22
examples/tutorial/semantics/LexBaseSwe.gf
Normal file
@@ -0,0 +1,22 @@
|
||||
instance LexBaseSwe of LexBase = open SyntaxSwe, ParadigmsSwe in {
|
||||
|
||||
oper
|
||||
even_A = mkA "jämn" ;
|
||||
odd_A = invarA "udda" ;
|
||||
prime_A = mkA "prim" ;
|
||||
great_A = mkA "stor" "större" "störst" ;
|
||||
common_A = mkA "gemensam" ;
|
||||
equal_A2 = mkA2 (invarA "lika") (mkPrep "med") ;
|
||||
greater_A2 = mkA2 (invarA "större") (mkPrep "än") ; ---
|
||||
smaller_A2 = mkA2 (invarA "mindre") (mkPrep "än") ; ---
|
||||
divisible_A2 = mkA2 (mkA "delbar") (mkPrep "med") ;
|
||||
number_N = mkN "tal" "tal" ;
|
||||
sum_N2 = mkN2 (mkN "summa") (mkPrep "av") ;
|
||||
product_N2 = mkN2 (mkN "produkt") (mkPrep "av") ;
|
||||
divisor_N2 = mkN2 (mkN "delare") (mkPrep "av") ;
|
||||
|
||||
none_NP = mkNP (mkPN "inget" neutrum) ; ---
|
||||
|
||||
invarA : Str -> A = \x -> mkA x x x x x ; ---
|
||||
|
||||
}
|
||||
@@ -25,7 +25,7 @@ concrete StructuralSwe of Structural = CatSwe **
|
||||
during_Prep = ss "under" ;
|
||||
either7or_DConj = sd2 "antingen" "eller" ** {n = Sg} ;
|
||||
everybody_NP = regNP "alla" "allas" Plg ;
|
||||
every_Det = {s = \\_,_ => "varje" ; n = Sg ; det = DDef Indef} ;
|
||||
every_Det = {s = \\_,_ => "varje" ; n = Sg ; det = DIndef} ;
|
||||
everything_NP = regNP "allting" "alltings" SgNeutr ;
|
||||
everywhere_Adv = ss "överallt" ;
|
||||
few_Det = {s = \\_,_ => "få" ; n = Pl ; det = DDef Indef} ;
|
||||
|
||||
Reference in New Issue
Block a user