packages feed

gf-3.4: examples/extmini/ResCmn.gf

resource ResCmn = open Prelude in {
flags coding=utf8;
-- parameters

param
    TTense = TPres | TPerf | TPast | TFut ;
    Aspect = Perf | DurStat | DurProg | Exper ;
    Number   = Sg | Pl ;
    SForm = Phr PosType | Sent;
    PosType = APhrase | NPhrase | VPhrase ;
    DeForm = DeNoun | NdNoun ;    -- parameter created for noun with/out partical "de"

-- parts of speech

oper

  VP = { verb : Verb ; compl : Str ; prePart : Str} ;
  NP = {s : Str ; n : Number } ; 
  copula  : Verb = { s = table {
                            True => table { _    => "是"  };
                            False => table { _   => "不是" }};
                     vinf = "是" } ;

-- for morphology

  Noun : Type = {s : Str; Counter: Str} ;
  Adj  : Type = {s : Str; monoSyl: Bool} ;
  Verb : Type = {s : Bool => Aspect => Str ; vinf : Str} ;

  regNoun : Str -> Str -> Noun = \s,c -> {s = s; Counter = c};

  mkAdj : Str -> Bool -> Adj = \s,b -> {s = s; monoSyl = b};

  regVerb : (walk : Str) -> Verb = \v -> {
           s = table {
                True => table { Perf    => v ++ "了" ;
                                DurStat => v ++ "着" ;
                                DurProg => "在" ++ v ;
                                Exper   => v ++ "过" } ;
                False => table {Perf    => "不" ++ v ++ "了" ;
                                DurStat => "不" ++ v ;
                                DurProg => "没" ++ "在" ++ v ;
                                Exper   => "没" ++ v ++ "过" }};
            vinf = v} ;
                          
  mkVerb : (believe : Str) -> (PerfPart : Str) 
                           -> (DurStatPart : Str)
                           -> (DurProgPart : Str) 
                           -> (ExperPart : Str) -> Verb = \v,pp,ds,dp,ep -> {
            s = table {
                True => table { Perf    => v ++ pp ;
                                DurStat => v ++ ds ;
                                DurProg => dp ++ v ;
                                Exper   => v ++ ep } ;
                False => table {Perf    => "不" ++ v ++ pp ;
                                DurStat => "不" ++ v ;
                                DurProg => "没" ++ dp ++ v ;
                                Exper   => "没" ++ v ++ ep }} ;
            vinf = v} ;

-- for structural words

  mkDet : Str -> Number -> {s : Str ; n : Number} = \s,n -> {
    s = s ;
    n = n
    } ;

  pronNP : (s : Str) -> Number -> NP =   \s,n -> {
    s = s ;
    n = n
    } ;
    
  mkPrep : Str -> Str -> {s : Str ; prePart : Str} = \s,b -> {
    s = s ;
    prePart = b} ;
    
  mkAdv : Str -> Str -> {s : Str ; prePart : Str} = \b,s -> {
    s = s ;
    prePart = b} ;
  
  mkSubj : Str -> Str -> {prePart : Str ; sufPart : Str} = \p,s -> {
    prePart = p ;
    sufPart = s} ;

-- Proper Noun

  PropN : (s : Str) -> Number -> NP =   \s,n -> {
    s = s ;
    n = n
   } ;

    }