#!/usr/bin/perl
use strict;
use utf8;
use open ":utf8";
binmode(STDIN,":utf8");
binmode(STDOUT,":utf8");
# Testwort
my $donau="do\x{02d0}.na\x{028a}.dampf.\x{0283}\x{026a}f.fa\x{02d0}\x{0250}tz.g\x{0259}.z\x{025b}l.\x{0283}aftz.ka\x{02d0}.pi\x{02d0}.t\x{025b}\x{02d0}ns.m\x{028f}t.s\x{0259}n.hal.t\x{250}";
# Phoneminventar
my $vl="ie\x{025B}ay\x{00f8}uo";				# Langvokalpraefixe
my $vlsuf="\x{02d0}";						# Langvokalsuffixe
my $vk="\x{025b}a\x{0153}\x{026a}\x{028f}\x{028a}\x{0254}";	# Kurzvokale
my $vr="\x{0259}\x{0250}";					# Reduktionsvokale
my $pl="pbtdkg";						# Plosive
my $fr="fvsz\x{0283}\x{0292}\x{00e7}jh";			# Frikative
my $nk="mn\x{014b}";						# Nasalkonsonanten
my $vb="r";							# Vibranten
my $lt="l";							# Laterale
# Grammatikregeln
# Silbenkopf
my $kopf="([".$pl."]|";						# Entweder Plosiv
$kopf=$kopf."((?![\x{00e7}])[".$fr."])|";			# oder Frikativ (ohne ch)
$kopf=$kopf."[".$lt."]|";					# oder Lateral
$kopf=$kopf."[".$nk."]|";					# oder Nasalkonsonant
$kopf=$kopf."[".$vb."]|";					# oder Vibrant
$kopf=$kopf."([\x{0283}][tp])|";				# oder Sch+p/t
$kopf=$kopf."((?![td])[".$pl."][".$lt."])|";			# oder Plosiv (ohne t,d)+Lateral 
$kopf=$kopf."((?![\x{0292}\x{00e7}jhz])[".$fr."])[".$lt."]|"; 	# oder Frikativ (ohne ch, j, h, sch wie in Garage)+Lateral
$kopf=$kopf."([".$pl."][".$vb."]))?"; 				# oder Plosiv+Vibrant

# Silbennukleus
my $nukleus="([".$vk."]|";					# Entweder Kurzvokal
$nukleus=$nukleus."[".$vr."]|";					# oder Reduktionsvokal
$nukleus=$nukleus."([".$vl."][".$vlsuf."])|";			# oder Langvokal
$nukleus=$nukleus."([".$vl."][".$vlsuf."][".$vr."])|";		# oder Langvokal+Reduktionsvokal
$nukleus=$nukleus."(\x{0061}\x{026a}|\x{0061}\x{028a}|\x{025b}\x{026a}|\x{0254}\x{026a}|\x{028a}\x{026a}))";	
                                                                # oder Diphtong
# Silbenkoda
my $koda="([".$pl."]|";						# Entweder Plosiv
$koda=$koda."((?![hjv\x{0292}])[".$fr."])|";			# oder Frikativ (ohne h, j, v,  sch wie in Jeanette)
$koda=$koda."[".$nk."]|";					# oder Nasalkonsonant
$koda=$koda."[".$lt."]|";					# oder Lateral
$koda=$koda."([".$nk."][".$pl."])|"; 				# oder Nasalkonsonant+Plosiv
$koda=$koda."([".$nk."][".$fr."])|"; 				# oder Nasalkonsonant+Frikativ
$koda=$koda."((?![vjh\x{0292}])[".$fr."][t])|";			# oder Frikativ (ohne v, j, h, und sch wie in Garage)+t
$koda=$koda."mpf)?";						# oder mpf
$koda=$koda."(z)?"; 						# z am Ende


my @silben=split(/\./,$donau);
my $silbe;

foreach $silbe (@silben)
{
  print $silbe."\n";
  if ($silbe=~/^$kopf$nukleus$koda$/)
  {
    print "->Korrekt\n";
  }
  else
  {
    print "->Nicht korrekt\n";
  }
}

print "\nGegentest:\n";
my $silbe="strts";
print $silbe."\n";
if ($silbe=~/^$kopf$nukleus$koda$/)
{
  print "->Korrekt\n";
}
else
{
  print "->Nicht korrekt\n";
}