TOY    GERMAN   CONFIG (1.0)
  ROOTCAT   ROOT.
  FILES  . 
  LEXENTRIES   (TOY GERMAN).
  RULES   (TOY GERMAN).
  TEMPLATES   (TOY GERMAN).
  MORPHOLOGY	.
  FEATURES. 
  GOVERNABLERELATIONS    SUBJ OBJ OBJ-?+ OBL OBL-?+ COMP XCOMP.
  SEMANTICFUNCTIONS    ADJUNCT  TOPIC.
  NONDISTRIBUTIVES    NUM PERS.
  EPSILON   e.
  OPTIMALITYORDER     NOGOOD.

----
TOY   GERMAN   RULES (1.0)

"toy German grammar from LFG WS 2005 and MT WS 2005, slightly modified for Grammar Dev. SoSe 2014"

   ROOT --> "can add other types of clauses here: imperative, questions"
	  "this is a declarative clause"
 	  S: (^ CLAUSE-TYPE) = decl.  

   S --> @VORFELD    "use macro rules to capture German topological fields"
 	 @MITTELFELD 
 	 @NACHFELD
 	 (PERIOD). 
 
   VORFELD = NP: @GF.   "@GF template for allowing for different kinds of grammatical functions"

   MITTELFELD = { C "if complementizer, then verb final"
 	    VP 
 	  | @V2 "otherwise verb second"
 	    @MITTELFELD1
 	    (VC) "possible final verb"
 	  | 
 	    V: ^=! " either a finite verb taking an xcomp (e.g., wollen)" 
	       (! FIN) =c +;
 	    VPxcomp: (^XCOMP) = !}.


   MITTELFELD1 = " either a NP, ADV or PP in any order with shuffle operator"
 	  NP*: @GF, 
	  PP*: @P-GF, "adjuncts or obls"
	  ADV*: ! $ (^ ADJUNCT). 
		 
   NACHFELD = "so far only PPs in the Nachfeld"
 	  PP*:  @P-GF. 

   V2 = { V: ^=! " either a finite verb" 
	     (! FIN) =c + 
 	| AUX: ^=! "or a finite aux"
	       (! FIN) =c +} . 

   VP --> " either a NP, ADV or PP" 
	  { NP: @GF 
 	  | ADV: ! $ (^ ADJUNCT) 
 	  | PP: @P-GF}
 	  { VC | VP}.   "followed either by a V or another VP"

   VPxcomp --> (NP: @GF) "NP for now"
 	  { VC | VPxcomp}.   "followed either by a V or another VP"

   VC --> "can actually have more than one verb here"
 	  V: ^=!
	     { (! VFORM) =c perfp " no finite verbs here"
	     | (! VFORM) =c inf}. 

   NP --> "ADJ-AGR does agreement within NP"
	  (DET: ^=! 
		@ADJ-AGR)
 	  ADJ*: ! $ (^ ADJUNCT) 
		@ADJ-AGR; 
 	  N. 

   PP --> { P: ^=! 
	       (^ PTYPE)=c sem; "for adjuncts" 
 	    NP: (^ OBJ)=! 
 	  | P: ^=! 
	       (^ PTYPE)=c nosem; "for oblique arguments"
 	    NP: ^=!}.

----
TOY   GERMAN   TEMPLATES (1.0)
   
   ADJ(_P T) = (^ PRED) = '_P'
	  (^ ATYPE) = attributive
	  (^ DEGREE) = positive. 


   ADJ-AGR = (^ NUM) = (! NUM)   "for adjective agreement" 
	  (^ GEND) = (! GEND)
	  (^ CASE) = (! CASE). 

   GF = { (^ SUBJ) = ! 
	| (^ OBJ) = ! 
	| (^ OBJ-TH) = !}. 

   P-GF = { ! $ (^ ADJUNCT)    "either adjunct or obl for PPs" 
	   (! PTYPE) =c sem 
	  | (^ OBL) = !
            (^ OBL PTYPE) =c nosem}.

   PCASE(P) = (^ PCASE) = P. 

   PTYPE(P) = (^ PTYPE) = P. 

   PSEM(P)  = (^ PSEM) = P. 

   NTYPE = (^ NTYPE NSEM COMMON) = count
	   (^ NTYPE NSYN) = common. 

   NTYPE-PROPER = (^ NTYPE NSEM PROPER PROPER-TYPE) = name
	   (^ NTYPE NSYN) = proper. 

   PRED(_P) = (^ PRED) = '_P'.  

   COUNT-NOUN(_P G N) = "count nouns"
	  (^ PRED) = '_P'
	  @NTYPE
	  (^ GEND) = G
	  (^ NUM) = N
	  (^ PERS) = 3. 	  

   NOUN(_P) = "core noun"
	  @(PRED _P) "supplies PRED value"
	  @(PERS 3).

   PROPN(P G) = (^PRED)='P' "proper names"
	  (^ GEND) = G
	  @NTYPE-PROPER
	  (^ NUM)=sg
	  (^ PERS)=3.

   SUBJ-AGR(P N) = (^ SUBJ NUM)=N  "for subject agreement"
	  (^ SUBJ PERS)=P. 

  SUBJ-AGR-N(N) = (^ SUBJ NUM)=N.  "for subject number agreement"

  SUBJ-AGR-P(P) = (^ SUBJ PERS)=P.  "for subject pers agreement"

   FIN =(^FIN)=+. 

   NOFIN = (^ FIN) = -.  

   INF = (^ INF) = +. 
   
   TENSE(T) = (^ TNS-ASP TENSE)= T. 

   MOOD(M) = (^ TNS-ASP MOOD) = M. 

   GEND(G) = (^ GEND) = G. 

   NUM(N) = (^ NUM) = N. 

   PERS(P) = (^ PERS) = P. 

   PRONOUN(P) = (^ PRED) = 'PRO'  "place holder for pronouns"
              (^ PRON-FORM) = P.  

   CASE(C) = (^ CASE) = C. 

   GF-CASE(GF C) = (^GF CASE) = C. 

   VFORM(F) = (^ VFORM) = F. 

   PASSIVE = (^ PASSIVE) = +. 

   NOPASSIVE = (^ PASSIVE) = -. 

   INTRANS(P) = (^ PRED)='P<(^ SUBJ)>'
                @(GF-CASE SUBJ nom). 

   TRANS(P) =  @(PASS (^ PRED)='P<(^ SUBJ)(^ OBJ)>')
               @(GF-CASE SUBJ nom). 

   TRANS-DAT(P) = @(PASS-DAT (^ PRED)='P<(^ SUBJ)(^ OBJ)>'). 

   TRANS-OBL(P C) = (^ PRED)='P<(^ SUBJ)(^ OBL)>'
	  @(GF-CASE SUBJ nom)
	  (^ OBL PCASE) =c C.   "can only appear with certain preps"

   DITRANS(P) = @(PASS (^ PRED)='P<(^ SUBJ)(^ OBJ)(^ OBJ-TH)>')
               @(GF-CASE SUBJ nom)
               @(GF-CASE OBJ-TH dat). 

   DITRANS-ACC-ACC(P) = @(PASS (^ PRED)='P<(^ SUBJ)(^ OBJ)(^ OBJ-TH)>')
               @(GF-CASE SUBJ nom)
               @(GF-CASE OBJ-TH acc). 

   OPTTRANS(P) = { @(INTRANS P)|@(TRANS P)}. 

   PASS(_SCHEMATA) = "allows non-passive form as first option and"
	  "passive form as second"
	  { _SCHEMATA
             @NOPASSIVE 
	    "if no passive, do nothing, just register the fact"
	    @(GF-CASE OBJ acc) "accusative object"
	   |_SCHEMATA
	    (^ PASSIVE) =c + "otherwise overgenerate"
	    (^ OBJ)-->(^ SUBJ) "object becomes subject"
	    (^ SUBJ)-->NULL "SUBJ becomes NULL"
	  }. 


   PASS-DAT(_SCHEMATA) = "extra lexical rule for verbs with dative objects"
	  { _SCHEMATA
             @NOPASSIVE 
	    "if no passive, do nothing, just register the fact"
	    @(GF-CASE OBJ dat) "dative object"
            @(GF-CASE SUBJ nom) "nominative subject"
	   |_SCHEMATA
	    (^ PASSIVE) =c + "otherwise overgenerate"
	    (^ SUBJ)-->NULL "SUBJ becomes NULL, nothing else happens"
	  }. 

   SPEC(_P T) = (^  SPEC DET PRED) = '_P'
	  (^ SPEC DET DET-TYPE) = T.

---- 

TOY   GERMAN   LEXICON (1.0)

"names"

Hans	  N * @(PROPN %stem masc).

Gabi	  N * @(PROPN %stem fem).

Bello     N * @(PROPN %stem masc).

"count nouns" 

Hund N * @(COUNT-NOUN %stem masc sg). 

Katze N * @(COUNT-NOUN %stem fem sg). 

Affe N * @(COUNT-NOUN %stem masc sg). 

Kind  N * @(COUNT-NOUN %stem neut sg). 

Knochen N * @(COUNT-NOUN %stem masc sg). 

Baum N * @(COUNT-NOUN %stem masc sg). 

Garten N * @(COUNT-NOUN %stem masc sg). 

"verbs"


will 	  V * (^ PRED) = 'wollen<(^SUBJ)(^XCOMP)>'
	      (^ SUBJ) = (^ XCOMP SUBJ)
	      @(TENSE pres)
	      @(SUBJ-AGR 3 sg)
              (^ VTYPE) = main
	      @FIN 
	      @(MOOD indicative). 

leuchtet  V * { @(INTRANS leuchten) | 
		@(INTRANS leuchten)
		(^ PRT-FORM auf) }
              @FIN 
	      @(MOOD indicative)
	      (^ PASSIVE) = - 
              (^ VTYPE) = main
              @(SUBJ-AGR 3 sg)
              @(TENSE pres). 

denkt 	  V * {@(INTRANS denken) | @(TRANS-OBL denken an)}
              @FIN 
	      @(MOOD indicative)
	      (^ PASSIVE) = - 
              (^ VTYPE) = main
              @(SUBJ-AGR 3 sg)
              @(TENSE pres). 

jagt 	  V * @(TRANS jagen)
              @FIN 
	      @(MOOD indicative)
	      (^ PASSIVE) = - 
              (^ VTYPE) = main
              @(SUBJ-AGR 3 sg)
              @(TENSE pres). 

jagst 	  V * @(TRANS jagen)
	      @FIN 
	      @(MOOD indicative)
	      (^ PASSIVE) = - 
              (^ VTYPE) = main
              @(SUBJ-AGR 2 sg)
              @(TENSE pres). 

gejagt	  V * @(TRANS jagen) 
              @(VFORM perfp)
              @(TENSE past). 

bellt 	  V * @(INTRANS bellen)
	      @FIN
	      @(MOOD indicative)
	      (^ PASSIVE) = - 
              (^ VTYPE) = main
	      @(SUBJ-AGR 3 sg)
	      @(TENSE pres). 

lacht 	  V * @(INTRANS lachen)
	      @FIN
	      @(MOOD indicative)
	      (^ PASSIVE) = - 
              (^ VTYPE) = main
              @(SUBJ-AGR 3 sg)
              @(TENSE pres). 

lachst 	  V * @(INTRANS lachen)
	      @FIN
	      @(MOOD indicative)
	      (^ PASSIVE) = - 
              (^ VTYPE) = main
	      @(SUBJ-AGR 2 sg)
	      @(TENSE pres). 

lachen 	  V * @(INTRANS lachen)
              @(VFORM inf). 

geht 	  V * @(INTRANS gehen)
	      @FIN
	      @(MOOD indicative)
	      (^ PASSIVE) = - 
              (^ VTYPE) = main
	      @(SUBJ-AGR 3 sg)
	      @(TENSE pres). 

gibt 	  V * @(DITRANS geben) 
              @FIN 
	      @(MOOD indicative)
	      (^ PASSIVE) = - 
              (^ VTYPE) = main
              @(SUBJ-AGR 3 sg)
	      @(TENSE pres). 


gibst 	  V * @(DITRANS geben) 
	      @FIN 
	      @(MOOD indicative)
	      (^ PASSIVE) = - 
              (^ VTYPE) = main
	      @(SUBJ-AGR 2 sg)
	      @(TENSE pres). 

gegeben	  V * @(DITRANS geben) 
              @(VFORM perfp)
	      @(TENSE past).    

nannte    V * @(DITRANS-ACC-ACC nennen)
              @FIN
	      @(MOOD indicative)
	      (^ PASSIVE) = - 
              (^ VTYPE) = main
              @(SUBJ-AGR 3 sg)
              @(TENSE past).

genannt	  V * @(DITRANS-ACC-ACC nennen) 
              @(VFORM perfp)
	      @(TENSE past).         

hilft     V * @(TRANS-DAT helfen)
              @FIN
	      @(MOOD indicative)
	      (^ PASSIVE) = - 
              (^ VTYPE) = main
              @(SUBJ-AGR 3 sg)
              @(TENSE pres).

geholfen  V * @(TRANS-DAT helfen) 
	      @(VFORM perfp)
	      @(TENSE past). 


wurde 	  AUX * "can only be passive if there is a participle" 
		@PASSIVE 
		@FIN 
		(^ VFORM) =c perfp. 

"prepositions"

in 	  P * { (^ PRED) = 'in<(^ OBJ)>'
		@(PTYPE sem)
		{ @(PSEM dir) (^ OBJ CASE) =c acc
		| @(PSEM loc) (^ OBJ CASE) =c dat }
	      | ~(^ PSEM)
		@(PCASE in) 
		@(PTYPE nosem)
	      }. 
	      


an 	  P * { (^ PRED) = 'an<(^ OBJ)>'
		@(PTYPE sem)
		{ @(PSEM dir) (^ OBJ CASE) =c acc
		| @(PSEM loc) (^ OBJ CASE) =c dat}
	      | ~(^ PSEM)
		@(PCASE an) 
		@(PTYPE nosem)
	      }. 
	      
	      
"determiners"
	      
Der 	  DET * @(SPEC der def)
		"case copied from Thomas"
		{ (^ CASE) = nom (^ GEND)= masc 
		| (^ CASE)= dat (^ GEND)= fem }. 



der 	  DET * @(SPEC der def)
		"case copied from Thomas"
		{ (^ CASE) = nom (^ GEND)= masc 
		| (^ CASE)= dat (^ GEND)= fem }. 


Das	  DET * @(SPEC das def)
	        (^ GEND) = neut
		{ (^ CASE) = nom | (^ CASE)= acc}. 



das	  DET * @(SPEC das def)
	        (^ GEND) = neut
		{ (^ CASE) = nom | (^ CASE)= acc}. 



die	  DET * @(SPEC die def)
		{(^ CASE) = nom (^ GEND)= fem (^ NUM)=sg
		| (^ CASE) = acc (^ GEND)= fem (^ NUM)=sg
		| (^ CASE) = nom (^ NUM)= pl
		| (^ CASE) = acc (^ NUM)= pl}.



Die	  DET * @(SPEC die def)
		{(^ CASE) = nom (^ GEND)= fem (^ NUM)=sg
		| (^ CASE) = acc (^ GEND)= fem (^ NUM)=sg
		| (^ CASE) = nom (^ NUM)= pl
		| (^ CASE) = acc (^ NUM)= pl}.


den 	  DET * @(SPEC der def)
                (^ NUM) = sg
		(^ CASE) = acc.

dem 	  DET * @(SPEC der def)
		(^ CASE) = dat.

einen 	  DET * @(SPEC ein indef)
		@(CASE acc)
		@(NUM sg) 
		@(GEND masc). 

ein 	  DET * @(SPEC ein indef)
		@(CASE nom)
		@(NUM sg) 
		@(GEND masc).



eine 	  DET * @(SPEC ein indef)
		@(CASE nom)
		@(NUM sg) 
		@(GEND fem).


Ein 	  DET * @(SPEC ein indef)
		@(CASE nom)
		@(NUM sg) 
		@(GEND masc).



Eine 	  DET * @(SPEC ein indef)
		@(CASE nom)
		@(NUM sg) 
		@(GEND fem).


kleiner   ADJ * @(ADJ klein attributive)
		@(CASE nom)
		@(GEND masc)
		@(NUM sg). 

kleine 	  ADJ * @(ADJ klein attributive)
		"doing morphology without a morphological analyzer is a pain"
		{ (^ CASE)= nom (^ NUM)= sg (^ GEND)= masc
		| (^ CASE)= nom (^ NUM)=sg (^ GEND)= fem
		| (^ CASE)= nom (^ NUM)=sg (^ GEND)= neut
		| (^ CASE)= acc {(^ GEND)=fem | (^ GEND)=neut} (^ NUM)=sg
		| (^ CASE)= nom (^ NUM)=pl (^ GEND)= fem
		| (^ CASE)= acc (^ NUM)=pl (^ GEND)= fem
		| (^ CASE)= nom (^ NUM)=pl (^ GEND)= masc
		| (^ CASE)= nom (^ NUM)=pl (^ GEND)= fem
		| (^ CASE)= nom (^ NUM)=pl (^ GEND)= neut
		| (^ CASE)= acc (^ NUM)=pl (^ GEND)= masc
		| (^ CASE)= acc (^ NUM)=pl (^ GEND)= fem
		| (^ CASE)= acc (^ NUM)=pl (^ GEND)= neut}.
              
kleinen   ADJ * @(ADJ klein attributive)
		{ (^ CASE)= acc (^ NUM)=sg (^ GEND)=masc
		| (^ CASE) = dat (^ NUM)=sg (^ GEND)=masc
		| (^ CASE) = dat (^ NUM)=sg (^ GEND)=fem
		| (^ CASE) = dat (^ NUM)=sg (^ GEND)= neut
		| (^ CASE) = nom (^ NUM)=pl (^ GEND)=masc
		| (^ CASE) = acc (^ NUM)=pl (^ GEND)=fem
		| (^ CASE) = dat (^ NUM)=pl (^ GEND)=neut}.


grauer   ADJ * @(ADJ grau attributive)
		@(CASE nom)
		@(GEND masc)
		@(NUM sg). 

graue 	  ADJ * @(ADJ grau attributive)
		{ (^ CASE)= nom (^ NUM)= sg (^ GEND)= masc
		| (^ CASE)= nom (^ NUM)=sg (^ GEND)= fem
		| (^ CASE)= nom (^ NUM)=sg (^ GEND)= neut
		| (^ CASE)= acc {(^ GEND)=fem | (^ GEND)=neut} (^ NUM)=sg
		| (^ CASE)= nom (^ NUM)=pl (^ GEND)= fem
		| (^ CASE)= acc (^ NUM)=pl (^ GEND)= fem
		| (^ CASE)= nom (^ NUM)=pl (^ GEND)= masc
		| (^ CASE)= nom (^ NUM)=pl (^ GEND)= fem
		| (^ CASE)= nom (^ NUM)=pl (^ GEND)= neut
		| (^ CASE)= acc (^ NUM)=pl (^ GEND)= masc
		| (^ CASE)= acc (^ NUM)=pl (^ GEND)= fem
		| (^ CASE)= acc (^ NUM)=pl (^ GEND)= neut}.

              
grauen 	  ADJ * @(ADJ grau attributive)
		{ @(CASE nom) | @(CASE acc)}
		@(NUM pl)
		{ @(GEND fem) | @(GEND masc)}. 


"adverbs"

jetzt 	  ADV * (^ PRED) = 'jetzt'. 

schnell	  ADV * (^ PRED) = 'schnell'. 

"functional words"

dass 	C * (^ COMP-FORM) = dass. 

"puncutation"

.	PERIOD * . 

----