summaryrefslogtreecommitdiff
path: root/examples/phrasebook/SentencesI.gf
diff options
context:
space:
mode:
authoraarne <aarne@chalmers.se>2010-04-10 08:18:03 +0000
committeraarne <aarne@chalmers.se>2010-04-10 08:18:03 +0000
commit50a2e2ea93e7280ae6063a1cbf0e8cb29fa78a09 (patch)
tree201d3812073143a0aa30684f9fcb0fe2a30940b5 /examples/phrasebook/SentencesI.gf
parentd505fa5b6737b6b78fb65161cea3c2ac175494ab (diff)
regenerated clones with complete abstract and ready-maked Lexicon-based words in Phrasebook
Diffstat (limited to 'examples/phrasebook/SentencesI.gf')
-rw-r--r--examples/phrasebook/SentencesI.gf79
1 files changed, 70 insertions, 9 deletions
diff --git a/examples/phrasebook/SentencesI.gf b/examples/phrasebook/SentencesI.gf
index ba85af671..af9548bc1 100644
--- a/examples/phrasebook/SentencesI.gf
+++ b/examples/phrasebook/SentencesI.gf
@@ -1,3 +1,7 @@
+--1 Implementation of MOLTO Phrasebook
+
+--2 The functor for (mostly) common structures
+
incomplete concrete SentencesI of Sentences = Numeral **
open
Syntax,
@@ -15,19 +19,20 @@ incomplete concrete SentencesI of Sentences = Numeral **
Quality = AP ;
Property = A ;
Object = NP ;
- Place = {name : NP ; at : Adv ; to : Adv} ;
- PlaceKind = {name : CN ; at : Prep ; to : Prep} ;
+ Place = NPPlace ; -- {name : NP ; at : Adv ; to : Adv} ;
+ PlaceKind = CNPlace ; -- {name : CN ; at : Prep ; to : Prep} ;
Currency = CN ;
Price = NP ;
Action = Cl ;
- Person = {name : NP ; isPron : Bool ; poss : Quant} ;
- Nationality = {lang : NP ; prop : A ; country : NP} ;
+ Person = NPPerson ; -- {name : NP ; isPron : Bool ; poss : Quant} ;
+ Nationality = NPNationality ; -- {lang : NP ; country : NP ; prop : A} ;
Language = NP ;
Citizenship = A ;
Country = NP ;
- Day = {name : NP ; point : Adv ; habitual : Adv} ;
+ Day = NPDay ; -- {name : NP ; point : Adv ; habitual : Adv} ;
Date = Adv ;
Name = NP ;
+ Number = Card ;
lin
PSentence s = mkText s | lin Text (mkUtt s) ; -- optional '.'
PQuestion s = mkText s | lin Text (mkUtt s) ; -- optional '?'
@@ -35,7 +40,7 @@ incomplete concrete SentencesI of Sentences = Numeral **
PObject x = mkPhrase (mkUtt x) ;
PKind x = mkPhrase (mkUtt x) ;
PQuality x = mkPhrase (mkUtt x) ;
- PNumeral x = mkPhrase (mkUtt (mkCard (x ** {lock_Numeral = <>}))) ;
+ PNumber x = mkPhrase (mkUtt x) ;
PPlace x = mkPhrase (mkUtt x.name) ;
PPlaceKind x = mkPhrase (mkUtt x.name) ;
PCurrency x = mkPhrase (mkUtt x) ;
@@ -59,10 +64,10 @@ incomplete concrete SentencesI of Sentences = Numeral **
PropAction a = a ;
- AmountCurrency num curr = mkNP <lin Numeral num : Numeral> curr ;
+ AmountCurrency num curr = mkNP num curr ;
ObjItem i = i ;
- ObjNumber n k = mkNP <lin Numeral n : Numeral> k ;
+ ObjNumber n k = mkNP n k ;
ObjIndef k = mkNP a_Quant k ;
This kind = mkNP this_Quant kind ;
@@ -97,17 +102,73 @@ incomplete concrete SentencesI of Sentences = Numeral **
PersonName n =
{name = n ; isPron = False ; poss = mkQuant he_Pron} ; -- poss not used
----- NameString s = symb s ;
+---- NameString s = symb s ; --%
NameNN = symb "NN" ;
+ NNumeral n = mkCard <lin Numeral n : Numeral> ;
+
AHave p kind = mkCl p.name have_V2 (mkNP kind) ;
ACitizen p n = mkCl p.name n ;
ABePlace p place = mkCl p.name place.at ;
oper
+
+-- These operations are used internally in Sentences.
+
mkPhrase : Utt -> Text = \u -> lin Text u ; -- no punctuation
mkPerson : Pron -> {name : NP ; isPron : Bool ; poss : Quant} = \p ->
{name = mkNP p ; isPron = True ; poss = mkQuant p} ;
+-- These are used in Words for each language.
+
+ NPNationality : Type = {lang : NP ; country : NP ; prop : A} ;
+
+ mkNPNationality : NP -> NP -> A -> NPNationality = \la,co,pro ->
+ {lang = la ;
+ country = co ;
+ prop = pro
+ } ;
+
+ NPDay : Type = {name : NP ; point : Adv ; habitual : Adv} ;
+
+ mkNPDay : NP -> Adv -> Adv -> NPDay = \d,p,h ->
+ {name = d ;
+ point = p ;
+ habitual = h
+ } ;
+
+ NPPlace : Type = {name : NP ; at : Adv ; to : Adv} ;
+ CNPlace : Type = {name : CN ; at : Prep ; to : Prep} ;
+
+ mkCNPlace : CN -> Prep -> Prep -> CNPlace = \p,i,t -> {
+ name = p ;
+ at = i ;
+ to = t
+ } ;
+
+ NPPerson : Type = {name : NP ; isPron : Bool ; poss : Quant} ;
+
+ relativePerson : GNumber -> CN -> (Num -> NP -> CN -> NP) -> NPPerson -> NPPerson =
+ \n,x,f,p ->
+ let num = if_then_else Num n plNum sgNum in {
+ name = case p.isPron of {
+ True => mkNP p.poss num x ;
+ _ => f num p.name x
+ } ;
+ isPron = False ;
+ poss = mkQuant he_Pron -- not used because not pron
+ } ;
+
+ GNumber : PType = Bool ;
+ sing = False ; plur = True ;
+
+-- for languages without GenNP, use "the wife of p"
+ mkRelative : Bool -> CN -> NPPerson -> NPPerson = \n,x,p ->
+ relativePerson n x
+ (\a,b,c -> mkNP (mkNP the_Quant a c) (Syntax.mkAdv possess_Prep b)) p ;
+
+-- for languages with GenNP, use "p's wife"
+-- relativePerson n x (\a,b,c -> mkNP (GenNP b) a c) p ;
+
}