MorPHP는 형태 규칙을 서술하기 위한 기술 언어입니다. 이 언어는 다음 네 가지 원칙에 따라 설계되었습니다.
또한 다양한 언어들의 형태 규칙을 서술할 수 있도록 범용성을 가지는 것이 목표입니다. 현재는 일반적인 굴절어와 교착어 계통의 형태 규칙을 서술할 수 있으며, 앞으로 형판형태이론을 비롯한 다양한 형태 규칙을 지원하여 더 많은 언어를 서술할 수 있도록 할 예정입니다. 아래는 MorPHP 형태 규칙 서술 언어로 작성된 라틴어 명사 곡용 예제입니다.
/* 라틴어 명사 곡용 규칙 */
// 언어 자질 정의
[Gender] := [mas, fem, neu]
[Number] := [sng, plr]
[Case] := [nom, gen, dat, acc, abl, voc]
[NClass] := [n1, n2, n3, n3i, n4, n5, ng1, ng2, ng4, ng5]
[Clitic] := [noclitic, and, or, rog]
// 명사 규칙 정의
<<Noun>> := <*NStem> <Ending> <Clitics>;
// 어근 형태소 패턴 정의
<*NStem> := {
morph nominative '' [sng, nom|voc, mas|fem] [sng, nom|voc|acc, neu],
morph genitive '' [sng, gen|dat|acc|abl, mas|fem] [sng, gen|dat|abl, neu] [plr]
}
// 어미 형태소 패턴 정의
<Ending> := {
morph 'a' [n1, sng, nom|voc],
morph 'ae' [n1, sng, gen|dat] [n1, plr, nom|voc],
morph 'am' [n1, sng, acc],
morph 'a:' [n1, sng, abl],
morph 'a:rum' [n1, plr, gen],
morph 'i:s' [n1|n2, plr, dat|abl],
morph 'a:s' [n1, plr, acc],
morph 'us' [n2|n4, sng, nom, mas|fem] [n4, sng, voc],
morph 'i:' [n2, sng, gen] [n2, plr, nom|voc, mas|fem],
morph 'o:' [n2, sng, dat|abl],
morph 'um' [n2|n4, sng, acc, mas|fem] [n2, sng, nom|voc|acc, neu],
morph 'e' [n2, sng, voc, mas|fem],
morph 'o:rum' [n2, plr, gen],
morph 'o:s' [n2, plr, acc, mas|fem],
morph 'a' [n2|n3, plr, nom|voc|acc, neu],
morph '' [n3|n3i, sng, nom|voc, mas|fem] [n3|n3i, sng, nom|voc|acc, neu],
morph 'is' [n3|n3i, sng, gen],
morph 'i:' [n3|n3i, sng, dat],
morph 'em' [n3|n3i, sng, acc],
morph 'e' [n3|n3i, sng, abl],
morph 'e:s' [n3|n3i, plr, nom|voc|acc],
morph 'um' [n3, plr, gen],
morph 'ium' [n3i, plr, gen],
morph 'ia' [n3i, plr, nom|voc|acc, neu],
morph 'ibus' [n3|n3i|n4, plr, dat|abl],
morph 'u:s' [n4, sng, gen] [n4, plr, nom|voc|acc, mas|fem],
morph 'ui:' [n4, sng, dat],
morph 'u:' [n4, sng, abl, mas|fem] [n4, sng, neu],
morph 'uum' [n4, plr, gen],
morph 'ua' [n4, plr, nom|voc|acc, neu],
morph 'e:s' [n5, sng, nom|voc] [n5, plr, nom|voc|acc],
morph 'ei:' [n5, sng, gen|dat],
morph 'em' [n5, sng, acc],
morph 'e:' [n5, sng, abl],
morph 'e:rum' [n5, plr, gen],
morph 'e:bus' [n5, plr, dat|abl]
}
// 접어 형태소 패턴 정의
<Clitics> := {
empty [],
morph 'que' [and],
morph 've' [or],
morph 'ne' [rog]
}