% testgrammatik.pl erweitert zu testgrammatikErweitert.pl  23.11.2016

  startsymbol(s(Tmp)) :- tempus(Tmp).
  startsymbol(is(Tmp)) :- tempus(Tmp).
  startsymbol(np(Kas)) :- kasus(Kas).

  kasus(nom).       kasus(akk).  kasus(dat).
  tempus(praes).    tempus(praet).
  
  s(Tmp) --> np(nom), tv(Tmp), np(akk), {tempus(Tmp)}.
  s(Tmp) --> np(nom), iv(Tmp), {tempus(Tmp)}.
  s(Tmp) --> np(akk), tv(Tmp), np(nom), {tempus(Tmp)}.

  s(Tmp) --> np(nom), btv(Tmp), np(dat), np(akk), {tempus(Tmp)}.
  s(Tmp) --> np(dat), btv(Tmp), np(nom), np(akk), {tempus(Tmp)}.

  np(Kas) --> art(Kas), a(Kas), n(Kas), {kasus(Kas)}.
% Nominalphrase ohne Adjektiv
  np(Kas) --> art(Kas), n(Kas), {kasus(Kas)}. 

  art(nom) --> ['Der'] ; [der].
  art(dat) --> ['Dem'] ; [dem].   
  art(akk) --> ['Den'] ; [den].
  a(nom) --> [alte] ; [junge].
  a(akk) --> [alten] ; [jungen].
  n(Kas) --> (['Mann'] ; ['Baum'] ; ['Apfel']), {kasus(Kas)}.
  tv(praes) --> [faellt] ; [fällt].
  tv(praet) --> [faellte] ; [fällte].

% intransitive Verben:
iv(praes) --> [faellt] ; [fällt].
iv(praet) --> [fiel].

% bitransitive Verben:
btv(praes) --> [gibt].
btv(praet) --> [gab].

% Interrogativsätze (Ja/Nein-Fragen und W-Fragen):
is(Tmp) --> tv(Tmp), np(nom), np(akk), ([?];[]), {tempus(Tmp)}. % optionales ?
is(Tmp) --> iv(Tmp), np(nom), ([?];[]), {tempus(Tmp)}. 
is(Tmp) --> inp(nom), tv(Tmp), np(akk), ([?];[]), {tempus(Tmp)}.
is(Tmp) --> inp(nom), iv(Tmp), ([?];[]), {tempus(Tmp)}.
is(Tmp) --> inp(akk), tv(Tmp), np(nom), ([?];[]), {tempus(Tmp)}.

inp(Kas) --> iart(Kas), a(Kas), n(Kas), {kasus(Kas)}.
inp(Kas) --> iart(Kas), n(Kas), {kasus(Kas)}.
inp(Kas) --> ipron(Kas), {kasus(Kas)}.

ipron(nom) --> ['Wer'] ; [wer].
ipron(akk) --> ['Wen'] ; [wen].
      
iart(nom) --> ['Welcher'] ; [welcher].   
iart(akk) --> ['Welchen'] ; [welchen].

