summaryrefslogtreecommitdiff
path: root/old-lib/resource/api/Combinators.gf
diff options
context:
space:
mode:
authoraarne <aarne@chalmers.se>2009-06-22 15:39:08 +0000
committeraarne <aarne@chalmers.se>2009-06-22 15:39:08 +0000
commite89fdae2fa1626348d8025824a7469252fa85e42 (patch)
treec7d46bbd0494043b4bd6f917a25a7687517d0547 /old-lib/resource/api/Combinators.gf
parent3049b59b35b25381a7c6787444165c200d66e08b (diff)
next-lib renamed to lib, lib to old-lib
Diffstat (limited to 'old-lib/resource/api/Combinators.gf')
-rw-r--r--old-lib/resource/api/Combinators.gf199
1 files changed, 199 insertions, 0 deletions
diff --git a/old-lib/resource/api/Combinators.gf b/old-lib/resource/api/Combinators.gf
new file mode 100644
index 000000000..23426df08
--- /dev/null
+++ b/old-lib/resource/api/Combinators.gf
@@ -0,0 +1,199 @@
+--1 Combinators: a High-Level Syntax API
+
+-- This module defines some "grammatical functions" that give shortcuts to
+-- typical constructions. [``Constructors`` Constructors.html] and the
+-- language-specific ``Paradigms`` modules are usually needed
+-- to construct arguments of these functions.
+
+incomplete resource Combinators = open Grammar in {
+
+ oper
+
+--2 Predication
+
+ pred : overload {
+ pred : V -> NP -> Cl ; -- x converges
+ pred : V2 -> NP -> NP -> Cl ; -- x intersects y
+ pred : V3 -> NP -> NP -> NP -> Cl ; -- x intersects y at z
+ pred : V -> NP -> NP -> Cl ; -- x and y intersect
+ pred : A -> NP -> Cl ; -- x is even
+ pred : A2 -> NP -> NP -> Cl ; -- x is divisible by y
+ pred : A -> NP -> NP -> Cl ; -- x and y are equal
+ pred : N -> NP -> Cl ; -- x is a maximum
+ pred : CN -> NP -> Cl ; -- x is a local maximum
+ pred : NP -> NP -> Cl ; -- x is the neutral element
+ pred : N -> NP -> NP -> Cl ; -- x and y are inverses
+ pred : Adv -> NP -> Cl ; -- x is in scope
+ pred : Prep -> NP -> NP -> Cl -- x is outside y
+ } ;
+
+--2 Function application
+
+ app : overload {
+ app : N -> NP ;
+ app : N2 -> NP -> NP ;
+ app : N3 -> NP -> NP -> NP ;
+ app : N2 -> NP -> NP -> NP ;
+ app : N2 -> N -> CN ;
+
+ app : N2 -> NP -> CN ; -- divisor of x
+ app : N3 -> NP -> NP -> CN ; -- path from x to y
+ app : N2 -> NP -> NP -> CN ; -- path between x and y
+ } ;
+
+--2 Coordination
+
+ coord : overload {
+ coord : Conj -> Adv -> Adv -> Adv ;
+ coord : Conj -> AP -> AP -> AP ;
+ coord : Conj -> NP -> NP -> NP ;
+ coord : Conj -> S -> S -> S ;
+ coord : Conj -> ListAdv -> Adv ;
+ coord : Conj -> ListAP -> AP ;
+ coord : Conj -> ListNP -> NP ;
+ coord : Conj -> ListS -> S ;
+
+ } ;
+
+--2 Modification
+
+ mod : overload {
+ mod : A -> N -> CN ;
+ mod : AP -> CN -> CN ;
+ mod : AdA -> A -> AP ;
+ mod : Det -> N -> NP ;
+ mod : Det -> CN -> NP ;
+ mod : Quant -> N -> NP ;
+ mod : Quant -> CN -> NP ;
+ mod : Predet -> N -> NP ;
+ mod : Numeral -> N -> NP
+
+
+ } ;
+
+--2 Negation
+
+ neg : overload {
+ neg : Imp -> Utt ;
+ neg : Cl -> S ;
+ neg : QCl -> QS ;
+ neg : RCl -> RS
+ };
+
+--2 Text append
+
+-- This is not in ground API, because it would destroy parsing.
+
+ appendText : Text -> Text -> Text ;
+
+--.
+
+ pred = overload {
+ pred : V -> NP -> Cl
+ = \v,np -> PredVP np (UseV v) ;
+ pred : V2 -> NP -> NP -> Cl
+ = \v,np,ob -> PredVP np (ComplSlash (SlashV2a v) ob) ;
+ pred : V3 -> NP -> NP -> NP -> Cl
+ = \v,np,ob,ob2 ->
+ PredVP np (ComplSlash (Slash2V3 v ob) ob2) ;
+ pred : V -> NP -> NP -> Cl
+ = \v,x,y -> PredVP (ConjNP and_Conj (BaseNP x y)) (UseV v) ;
+ pred : A -> NP -> Cl
+ = \a,np -> PredVP np (UseComp (CompAP (PositA a))) ;
+ pred : A2 -> NP -> NP -> Cl
+ = \a,x,y -> PredVP x (UseComp (CompAP (ComplA2 a y))) ;
+ pred : A -> NP -> NP -> Cl
+ = \a,x,y -> PredVP (ConjNP and_Conj (BaseNP x y)) (UseComp (CompAP (PositA a))) ;
+ pred : N -> NP -> Cl
+ = \n,x -> PredVP x (UseComp (CompNP (DetArtSg (IndefArt) (UseN n)))) ;
+ pred : CN -> NP -> Cl
+ = \n,x -> PredVP x (UseComp (CompNP (DetArtSg (IndefArt) n))) ;
+ pred : NP -> NP -> Cl
+ = \n,x -> PredVP x (UseComp (CompNP n)) ; pred : N2 -> NP -> NP -> Cl
+ = \n,x,y -> PredVP x (UseComp (CompNP (DetArtSg (IndefArt) (ComplN2 n y)))) ;
+ pred : N -> NP -> NP -> Cl
+ = \n,x,y -> PredVP (ConjNP and_Conj (BaseNP x y)) (UseComp (CompNP (DetArtPl (IndefArt) (UseN n)))) ;
+ pred : Adv -> NP -> Cl
+ = \a,x -> PredVP x (UseComp (CompAdv a)) ;
+ pred : Prep -> NP -> NP -> Cl
+ = \p,x,y -> PredVP x (UseComp (CompAdv (PrepNP p y)))
+
+ } ;
+
+ app = overload {
+ app : N -> NP
+ = \n -> (DetArtSg (DefArt) (UseN n)) ;
+ app : N2 -> NP -> NP
+ = \n,x -> (DetArtSg (DefArt) (ComplN2 n x)) ;
+ app : N3 -> NP -> NP -> NP
+ = \n,x,y -> (DetArtSg (DefArt) (ComplN2 (ComplN3 n x) y)) ;
+ app : N2 -> NP -> NP -> NP
+ = \n,x,y -> (DetArtSg DefArt (ComplN2 n (ConjNP and_Conj (BaseNP x y)))) ;
+ app : N2 -> N -> CN
+ = \f,n -> ComplN2 f (DetArtPl (IndefArt) (UseN n)) ;
+
+ app : N2 -> NP -> CN = ComplN2 ;
+ app : N3 -> NP -> NP -> CN = \n,x,y -> ComplN2 (ComplN3 n x) y ;
+ app : N2 -> NP -> NP -> CN = \n,x,y ->
+ ComplN2 n (ConjNP and_Conj (BaseNP x y)) ;
+ } ;
+
+ coord = overload {
+ coord : Conj -> Adv -> Adv -> Adv
+ = \c,x,y -> ConjAdv c (BaseAdv x y) ;
+ coord : Conj -> AP -> AP -> AP
+ = \c,x,y -> ConjAP c (BaseAP x y) ;
+ coord : Conj -> NP -> NP -> NP
+ = \c,x,y -> ConjNP c (BaseNP x y) ;
+ coord : Conj -> S -> S -> S
+ = \c,x,y -> ConjS c (BaseS x y) ;
+ coord : Conj -> ListAdv -> Adv
+ = \c,xy -> ConjAdv c xy ;
+ coord : Conj -> ListAP -> AP
+ = \c,xy -> ConjAP c xy ;
+ coord : Conj -> ListNP -> NP
+ = \c,xy -> ConjNP c xy ;
+ coord : Conj -> ListS -> S
+ = \c,xy -> ConjS c xy
+ } ;
+
+ mod = overload {
+ mod : A -> N -> CN
+ = \a,n -> AdjCN (PositA a) (UseN n) ;
+ mod : AP -> CN -> CN
+ = \a,n -> AdjCN a n ;
+ mod : AdA -> A -> AP
+ = \m,a -> AdAP m (PositA a) ;
+
+ mod : Det -> N -> NP
+ = \d,n -> DetCN d (UseN n) ;
+ mod : Det -> CN -> NP
+ = \d,n -> DetCN d n ;
+ mod : Quant -> N -> NP
+ = \q,n -> DetCN (DetQuant (q) NumSg) (UseN n) ;
+ mod : Quant -> CN -> NP
+ = \q,n -> DetCN (DetQuant (q) NumSg) n ;
+ mod : Predet -> N -> NP
+ = \q,n -> PredetNP q (DetArtPl (IndefArt) (UseN n)) ;
+ mod : Numeral -> N -> NP
+ = \nu,n -> DetCN (DetArtCard (IndefArt) (NumNumeral nu)) (UseN n)
+
+ } ;
+
+ neg = overload {
+ neg : Imp -> Utt
+ = UttImpSg PNeg ;
+ neg : Cl -> S
+ = UseCl TPres ASimul PNeg;
+ neg : QCl -> QS
+ = UseQCl TPres ASimul PNeg;
+ neg : RCl -> RS
+ = UseRCl TPres ASimul PNeg
+ };
+
+-- This is not in ground API, because it would destroy parsing.
+
+ appendText : Text -> Text -> Text
+ = \x,y -> {s = x.s ++ y.s ; lock_Text = <>} ;
+
+}