forked from apertium/apertium-smj-nob
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapertium-smj-nob.smj-nob.rtx
77 lines (70 loc) · 2.6 KB
/
apertium-smj-nob.smj-nob.rtx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
number = sg pl ;
gender = f m nt un mf ;
definite = (DD ind) def ind DD ;
comp = pst comp sup ;
sint = sint ;
prn_type = pers refl ;
person = p1 p2 p3 ;
case = nom acc ;
transitivity = tv iv ;
tense = pres pret ;
! ^Mun<prn><pers><p1><sg><nom><@SUBJ→>/Jeg<prn><pers><p1><mf><sg><nom><@SUBJ→>$
! ^oaidnit<vblex><tv><indic><pres><p1><sg><@+FMAINV>/se<vblex><pers-pro><pres><p1><sg><@+FMAINV>$
! ^stuoris<adj><attr><@→N>/stor<adj><sint><pst><GD><ND><@→N>$
! ^girji<n><sem_txt><pl><nom><@←SUBJ>/bok<n><f><maydetind><sem_txt><pl><nom><@←SUBJ>$
! ^.<sent>/.<sent><clb>$
n: _.gender.number.definite;
adj_plain: _.sint.comp.gender.number.definite;
adj: (always
1(adj_plain)[gender=(if (1.definite = def or 1.number = pl) un
elif (1.gender = f or 1.gender = m) mf
else 1.gender),
number=(if (1.definite = def) sp else 1.number)]);
prn: _.prn_type.person.gender.number.case ;
vblex: _.tense ;
post: _ ;
NP: _.definite ;
PP: _ ;
VP: _ ;
S: _ ;
! Mun oainnán girjji -> Jeg ser *ei* bok
! Mun oainnán stuorra girjjiid rukses viesu duohken.
! -> Jeg ser store bøker bak *det* røde huset.
has_adj = yes no ;
! <def-attr n="has_adj"><attr-item n="yes"/><attr-item n="no"/></def-attr>
maybe_det: (if (1.definite = def and 1.number = sg and 1.has_adj = yes)
[ [email protected].[1.gender].sg _ ]
elif (1.definite = ind and 1.number = sg)
[ [email protected].[1.gender].sg _ ]
else
[]
) ;
pro_undrop: (
if (1.number = sg)
(
if(1.person = p1) [jeg@{1.lemcase}.prn.pers.p1.mf.sg.nom _]
if(1.person = p2) [du@{1.lemcase}.prn.pers.p2.mf.sg.nom _]
else [den@{1.lemcase}.prn.pers.p3.nt.sg.nom _]
)
elif (1.number = pl)
(
if(1.person = p1) [vi@{1.lemcase}.prn.pers.p1.un.pl.nom _]
if(1.person = p2) [dere@{1.lemcase}.prn.pers.p2.un.pl.nom _]
else [de@{1.lemcase}.prn.pers.p3.un.pl.nom _]
)
else [disse@{1.lemcase}.prn.pers.p3.nt.sg.nom _]
) ;
NP -> n [$definite=ind]
{
1(maybe_det)[definite=$definite,has_adj=no]
%1
} |
adj n [$definite=ind]
{
2(maybe_det)[definite=$definite,has_adj=yes]
1[number=2.number,gender=2.gender,definite=$definite] _ %2
} |
prn.pers [$definite=def] { 1 } ;
PP -> NP post { 2 _ 1[definite=def] } ;
VP -> vblex.tv NP { 1(pro_undrop) 1[lemcase=aa] _ 2[definite=ind] } ;
S -> NP VP { 1 _ 2 } ;