summaryrefslogtreecommitdiff
path: root/grammars/health/HealthEng.gf
blob: 5663f38cdc668b3d7b55f1049a52d1083da7a884 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
-- use this path to read the grammar from the same directory
--# -path=.:../newresource/abstract:../prelude:../newresource/english
concrete HealthEng of Health = open PredicationEng, ResourceEng, Prelude, SyntaxEng, ExtraEng in {

flags 
  startcat=Phr ; lexer=text ; parser=chart ; unlexer=text ;

lincat 
  Patient = NP ;
  -- CN is not enough, because of the different form of the "head" body part 
  -- expression in "I have a headache" and "I have injured my head":
  Body = BodyCNCategory ;
  Symptom = NP ;
  SymptomDegree = AP ;
  Prop = S ;
  Illness = CN ; 
  Condition = VP ;
  Specialization = CN ;
  Medicine  = CN ;

lin 
  ShePatient = SheNP ;
  TheyPatient = TheyNP ;
  IPatientHe = INP ;

  And x y = ConjS AndConj (TwoS x y) ; 

  Influenza = cnNoHum (nounReg "influenza")** {lock_CN = <>} ; 
  Malaria =  cnNoHum (nounReg "malaria") ** {lock_CN = <>}; 
  Dentist  = cnHum (nounReg "dentist")** {lock_CN = <>}  ;
  PainKiller = cnNoHum (nounReg "painkiller")** {lock_CN = <>} ;

  High = AdjP1 ((regAdjective "high") ** {lock_Adj1 = <>});
  Terrible = AdjP1 ((regAdjective "terrible")** {lock_Adj1 = <>});

  Leg = { s = \\_,n,_ => case n of {Sg =>"leg" ; Pl=> "legs" }; 
         painInType = True } ;
  Head = { s = table{ True => table {Sg => table {_  => "head" }; 
           Pl => table {_  => "heads" }};
           False => table { _ => table {_=> "headache"}}} ;
           painInType = False } ;

  BeInCondition = PredVP ; 
  Pregnant = PosVG ( PredAP( AdjP1 (regAdjective ["pregnant"] ** {lock_Adj1 = <>}))) ;
  CatchCold = PosVG (PredTV (tvHave** {lock_TV = <>}) (DetNP (aDet** {lock_Det = <>}) (cnNoHum (nounReg "cold")** {lock_CN = <>})));

  Fever = DetNP (aDet** {lock_Det = <>}) (cnNoHum (nounReg "fever")** {lock_CN = <>}) ;
  FeverMod degree = DetNP (aDet** {lock_Det = <>}) (ModAdj degree (cnNoHum (nounReg "fever")** {lock_CN = <>})) ;  

  HaveIllness patient illness = predV2 tvHave patient (DetNP (nullDet** {lock_Det = <>}) illness) ; 
  Complain = predV2 tvHave ;

  NeedDoctor patient doctor = predV2 (mkTransVerbDir (regVerbP3 "need")**{lock_TV = <>}) 
       patient (DetNP (aDet ** {lock_Det = <>}) doctor); 
  NeedMedicine patient medicine = predV2 (mkTransVerbDir (regVerbP3 "need")**{lock_TV = <>}) 
       patient (DetNP (aDet ** {lock_Det = <>}) medicine); 
  TakeMedicine patient medicine = predV2 (mkTransVerbDir (regVerbP3 "take")**{lock_TV = <>})
       patient (DetNP (aDet ** {lock_Det = <>}) medicine) ; 

  Injured = injuredBody (mkTransVerb verbP3Have "injured"**{lock_TV = <>}) ;
  Broken = injuredBody (mkTransVerb verbP3Have "broken"**{lock_TV = <>}) ;

  PainIn = painInPatientsBody (cnNoHum (nounReg "pain")**{lock_CN = <>}) ;
  PainInMod = painInPatientsBodyMode (cnNoHum (nounReg "pain")**{lock_CN = <>});
};