--1 The Top-Level German Resource Grammar
--
-- Aarne Ranta 2002 -- 2003
--
-- This is the German concrete syntax of the multilingual resource
-- grammar. Most of the work is done in the file $syntax.Deu.gf$.
-- However, for the purpose of documentation, we make here explicit the
-- linearization types of each category, so that their structures and
-- dependencies can be seen.
-- Another substantial part are the linearization rules of some
-- structural words.
--
-- The users of the resource grammar should not look at this file for the
-- linearization rules, which are in fact hidden in the document version.
-- They should use $resource.Abs.gf$ to access the syntactic rules.
-- This file can be consulted in those, hopefully rare, occasions in which
-- one has to know how the syntactic categories are
-- implemented. The parameter types are defined in $Types.gf$.

concrete StructuralGer of Structural = CombinationsGer ** open Prelude, SyntaxGer in {

lin
  INP    = pronNounPhrase pronIch ;
  ThouNP = pronNounPhrase pronDu ;
  HeNP   = pronNounPhrase pronEr ;
  SheNP  = pronNounPhrase pronSie ; 
  WeNumNP n = pronNounPhrase (pronWithNum pronWir n) ;
  YeNumNP n = pronNounPhrase (pronWithNum pronIhr n) ;
  TheyNP = pronNounPhrase pronSiePl ;

  YouNP  = pronNounPhrase pronSSie ;

  ItNP   = pronNounPhrase pronEs ; 
  ThisNP = nameNounPhrase {s = dieserDet.s ! Neut} ; ---
  ThatNP = nameNounPhrase {s = jenerDet.s ! Neut} ; ---
  TheseNumNP nu = let diese = caselist "diese" "diese" "diesen" "diesen" in 
               normalNounPhrase  (\\c => diese ! c ++ nu.s) plural ;
  ThoseNumNP nu = let jene = caselist "jene" "jene" "jenen" "jenen" in
               normalNounPhrase (\\c => jene ! c ++ nu.s) plural ;

  AnyDet = detLikeAdj "irgendwelch" ;
  AnyNumDet nu = mkDeterminerNumReg nu "irgendwelche" Weak ;
  EveryDet = jederDet ; 
  AllMassDet   = allesDet ; 
  AllNumDet  = alleDet ; 
  WhichDet = welcherDet ;
  WhichNumDet = welcheDet ;
  MostDet  = meistDet ;
  MostsDet = meisteDet ;
  ManyDet = mkDeterminerPl (caselist "viele" "viele" "vielen" "vieler") Strong ;
  MuchDet = detLikeAdj "viel" ;
  NoDet = keinDet ;
  NoNumDet nu = mkDeterminerNumReg nu "keine" Strong ;
  SomeDet = einDet ; ---
  SomeNumDet nu = mkDeterminerNumReg nu "einige" Strong ;
  ThatDet = detLikeAdj "jen" ;
  ThisDet = detLikeAdj "dies" ;
  TheseNumDet nu = mkDeterminerNumReg nu "diese" Strong ;
  ThoseNumDet nu = mkDeterminerNumReg nu "jene" Strong ;

  HowIAdv   = ss "wie" ;
  WhenIAdv  = ss "wann" ;
  WhereIAdv = ss "war" ;
  WhyIAdv   = ss "warum" ;

  AndConj  = ss "und" ** {n = Pl} ;
  OrConj   = ss "oder" ** {n = Sg} ;
  BothAnd  = sd2 "sowohl" ["als auch"] ** {n = Pl} ;
  EitherOr = sd2 "entweder" "oder" ** {n = Sg} ;
  NeitherNor = sd2 "weder" "noch" ** {n = Sg} ;
  IfSubj   = ss "wenn" ;
  WhenSubj = ss "wenn" ;

  PhrYes = ss ["Ja ."] ;
  PhrNo = ss ["Nein ."] ;

  VeryAdv = ss "sehr" ;
  TooAdv = ss "zu" ;
  OtherwiseAdv = ss "sonst" ;
  ThereforeAdv = ss "deshalb" ;

  EverybodyNP  = nameNounPhrase
                   {s = caselist "jeder" "jeden" "jedem" "jedes"} ;
  SomebodyNP   = nameNounPhrase 
                   {s = caselist "jemand" "jemanden" "jemandem" "jemands"} ;
  NobodyNP     = nameNounPhrase 
                   {s = caselist "niemand" "niemanden" "niemandem" "niemands"} ;
  EverythingNP = nameNounPhrase 
                   {s = caselist "alles" "alles" "allem" "alles"} ; 
  SomethingNP  = nameNounPhrase {s = \\_ => "etwas"} ;
  NothingNP    = nameNounPhrase {s = \\_ => "nichts"} ;


  CanVV     = 
    mkVerbSimple (verbumKönnen) ** {isAux = True} ;
  CanKnowVV = 
    mkVerbSimple (verbumKönnen) ** {isAux = True} ;
  MustVV    = 
    mkVerbSimple (verbumMüssen) ** {isAux = True} ;
  WantVV    = 
    mkVerbSimple (verbumWollen) ** {isAux = True} ;


  EverywhereNP = ss "überall" ;
  SomewhereNP = ss "irgendwo" ;
  NowhereNP = ss "nirgends" ;

  AlthoughSubj = ss "obwohl" ;

  AlmostAdv = ss "fast" ;
  QuiteAdv = ss "ziemlich" ;

  InPrep = mkPrep "in" Dat ;
  OnPrep = mkPrep "auf" Dat ;
  ToPrep = mkPrep "nach" Dat ;
  ThroughPrep = mkPrep "durch" Acc ;
  AbovePrep = mkPrep "über" Dat ;
  UnderPrep = mkPrep "unter" Dat ;
  InFrontPrep = mkPrep "vor" Dat ;
  BehindPrep = mkPrep "hinter" Dat ;
  BetweenPrep = mkPrep "zwischen" Dat ;
  FromPrep = mkPrep "aus" Dat ;
  BeforePrep = mkPrep "vor" Dat ;
  DuringPrep = mkPrep "während" Gen ;
  AfterPrep = mkPrep "nach" Dat ;
  WithPrep = mkPrep "mit" Dat ;
  WithoutPrep = mkPrep "ohne" Acc ;
  ByMeansPrep = mkPrep "mit" Dat ;
  PartPrep = mkPrep "von" Dat ;
  PossessPrep = mkPrep "von" Dat ;
  AgentPrep = mkPrep "durch" Acc ;

} ;
