--# -path=.:../prelude:../abstract:../common

concrete PhraseCgg of Phrase = CatCgg ** open Prelude, ResCgg in {

lin

  UttS sent = sent ;
  UttQS     qs = qs ; --: QS -> Utt ;-- does John walk
  PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ;

  NoPConj = {s = ""} ;
  PConjConj conj = {s = conj.s ! AConj Other} ;
  NoVoc = {s = ""} ;
  VocNP np = {s=np.s !Nom} ;

  -- Utterances are formed from sentences, questions, and imperatives.
  UttNP     np = {s= np.s!Acc}; --: NP -> Utt ;
  UttAdv   adv = {s = adv.s}; --: Adv -> Utt ;        -- in the house
  UttImpSg  pol imp = {s = 
    case pol.p of {
        Pos  => imp.s!ImpPos;
        Neg => (mkSubjClitic (AgMUBAP2 Sg)) ++ imp.s!ImpNeg        
      }
    };--: Pol -> Imp -> Utt ; -- (do not) walk ----s
  --UttImpPl  : Pol -> Imp -> Utt ;         -- (don't) love yourselves
  UttImpPl pol imp ={s = 
    case pol.p of {
        Pos  => imp.s!ImpPos;
        Neg => (mkSubjClitic (AgMUBAP2 Pl)) ++ imp.s!ImpNeg        
      }
    };
  UttImpPol = UttImpPl;
  --UttAdv    : Adv  -> Utt ;               -- here
  UttAdv adv = {s= adv.s};

  -- better but can be improved upon
  UttVP vp  = case <vp.isCompApStem,vp.containsAdv, vp.containsAdV,vp.containsComp, vp.containsComp2> of {
                <False,False,True,False,False> => {s = "ku" ++ BIND ++ vp.s ++ BIND ++ vp.pres ++ vp.adV};
                <False,True,False,False,False> =>{s = "ku" ++ BIND ++ vp.s ++ BIND ++ vp.pres ++ vp.adv};
                <_, _,_,True,False>  => {s = "ku" ++ BIND ++ vp.s ++ BIND ++ vp.pres ++ vp.comp};
                <_, _,_,True, True> => {s = "ku" ++ BIND ++ vp.s ++ BIND ++ vp.pres ++ vp.comp ++ vp.comp2};
                <_, _,_,_, _>    => {s = "ku" ++ BIND ++ vp.s ++ BIND ++ vp.pres}
              };

  UttAP ap  = {s=ap.s!(AgP3 Sg KI_BI)};

  -- There are also 'one-word utterances'. A typical use of them is
  -- as answers to questions.
  -- *Note*. This list is incomplete. More categories could be covered.
  -- Moreover, in many languages e.g. noun phrases in different cases
  -- can be used.

    --UttIP     : IP   -> Utt ;               -- who
    UttIP ip ={s=ip.s};
    --UttIAdv   : IAdv -> Utt ;               -- why
    UttIAdv iAdv = case iAdv.requiresSubjPrefix of {
                        True  => {s= mkSubjClitic (AgP3 Sg MU_BA) ++ iAdv.s};
                        False => {s= iAdv.s}
                      };
    
    --UttNP     : NP   -> Utt ;               -- this man
    --UttNP np = {s= np.s!Nom};
    --UttAdv    : Adv  -> Utt ;               -- here
    --UttAdv adv ={s = adv.s};
    --UttVP     : VP   -> Utt ;               -- to sleep
    --UttCN     : CN   -> Utt ;               -- house
    UttCN cn ={s=cn.s!Sg!Complete};
    --UttCard   : Card -> Utt ;               -- five
    UttCard card ={s = card.s!(AgP3 Sg MU_BA)};
    --UttAP     : AP   -> Utt ;               -- fine
    --UttInterj : Interj -> Utt ;             -- alas
    UttInterj interj = let agr = AgMUBAP2 Pl in {s= mkObjClitic agr ++ interj.s};

{-
--1 Phrase: Phrases and Utterances

abstract Phrase = Cat ** {

-- When a phrase is built from an utterance it can be prefixed
-- with a phrasal conjunction (such as "but", "therefore")
-- and suffixing with a vocative (typically a noun phrase).

  fun
    PhrUtt   : PConj -> Utt -> Voc -> Phr ; -- but come here, my friend

-- Utterances are formed from sentences, questions, and imperatives.

    UttS      : S   -> Utt ;                -- John walks
    UttQS     : QS  -> Utt ;                -- is it good
    UttImpSg  : Pol -> Imp -> Utt ;         -- (don't) love yourself
    UttImpPl  : Pol -> Imp -> Utt ;         -- (don't) love yourselves
    UttImpPol : Pol -> Imp -> Utt ;         -- (don't) sleep (polite)

-- There are also 'one-word utterances'. A typical use of them is
-- as answers to questions.
-- *Note*. This list is incomplete. More categories could be covered.
-- Moreover, in many languages e.g. noun phrases in different cases
-- can be used.

    UttIP     : IP   -> Utt ;               -- who
    UttIAdv   : IAdv -> Utt ;               -- why
    UttNP     : NP   -> Utt ;               -- this man
    UttAdv    : Adv  -> Utt ;               -- here
    UttVP     : VP   -> Utt ;               -- to sleep
    UttCN     : CN   -> Utt ;               -- house
    UttCard   : Card -> Utt ;               -- five
    UttAP     : AP   -> Utt ;               -- fine
    UttInterj : Interj -> Utt ;             -- alas

-- The phrasal conjunction is optional. A sentence conjunction
-- can also be used to prefix an utterance.

    NoPConj   : PConj ;                     -- [plain phrase without conjunction in front]
    PConjConj : Conj -> PConj ;             -- and

-- The vocative is optional. Any noun phrase can be made into vocative,
-- which may be overgenerating (e.g. "I").

    NoVoc   : Voc ;                         -- [plain phrase without vocative]
    VocNP   : NP -> Voc ;                   -- my friend

-}

}
