-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdefinitions.cxx
142 lines (109 loc) · 7.03 KB
/
definitions.cxx
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#encoding "utf-8" // кодировка
#GRAMMAR_ROOT S
#include "np.cxx"
//вспомогательное
Break -> EOSent | AnyWord<wff=";"> | Punct;
LimitDef -> LBracket EnumNP+ RBracket;
Limits -> 'как' NP;
Limits -> 'как' ANP<gram="acc"> SimConjAnd ANP<gram="acc">;
Limits -> PPS;
LimPart -> PartcpPhrase;
LimitPart -> Comma LimPart interp (Definition.Comment::not_norm) Comma;
//---------------------Правила для терминов----------------------------
//---------------------------------------------------------------------
NP_Def -> Noun<gram="nom",wff=~"^[А-Я]$",kwtype=~[bad_np_start]> interp (Definition.KeyWord);
NP_Def -> NP_Def NP+;
ANP_Def -> Adj<gnc-agr[1]>+ NP_Def<gnc-agr[1], rt>;
ANPDef -> Adj<gnc-agr[1]>+ LimitDef interp (Definition.Limitation) NP_Def<gnc-agr[1]>;
NP_Def -> NP_Def ANP_Def+;
NP_Def -> NP_Def ANPDef;
NP_Def -> ANP_Def;
Term -> NP_Def;
Term -> NP_Def PPS interp (Definition.Comment::not_norm);
Term -> NP_Def LimitDef interp (Definition.Comment);
Term2 -> Adj<gram="ins"> interp (Definition.Term) DefPred interp (Definition.Pred) Adj<gnc-agr[1]> interp (+Definition.Term; Content.KeyNP) Noun<gnc-agr[1]> interp (+Definition.Term; Definition.KeyWord; +Content.KeyNP; Content.KeyWord); //делимым является земельный участок
PenalTerm -> NP_Def interp (Definition.Term; Content.KeyNP; Content.KeyWord) DefPredInt PartcpPhrase interp (+Definition.Term);
DefPred -> 'являться' | 'признаваться';
DefPred_pr -> 'пониматься' | 'относиться'; //для предиката с предлогом
DefPredInt -> DefPred interp (Definition.Pred) | Hyphen;
FullTerm -> Term interp (Definition.Term) (Limits interp (Definition.Limitation)) DefPredInt;
T_not_nom -> Noun<rt,kwtype=~[bad_np_start]> interp (Definition.KeyWord); //не однословные
T_not_nom -> T_not_nom<rt> NP;
T_not_nom -> Adj<gnc-agr[1]> T_not_nom<rt,gnc-agr[1]>;
Pr -> 'под' | 'к';
FullTerm -> Pr T_not_nom interp (Definition.Term) (Limits interp (Definition.Limitation::not_norm)) DefPred_pr interp (Definition.Pred);
FullTerm -> T_not_nom<gram="ins"> interp (Definition.Term) (Limits interp (Definition.Limitation::not_norm)) (LimitPart) DefPred interp (Definition.Pred);
//-------------Правила для правой части определения--------------------
//---------------------------------------------------------------------
NotOne -> 'один'<rt> 'из';
NP_Cont -> NotOne interp (Content.NotTheOnly="True") (Adj) Noun<rt> interp (Content.KeyWord);
NP_Cont -> Noun<rt, gram="nom", wff=~"^[А-Я]$",kwtype=~[bad_np_start]> interp (Content.KeyWord);
NP_Cont -> NP_Cont NP+;
NP_Cont -> NP_Cont ANP_Cont;
NP_Cont -> ANP_Cont;
NP_Cont -> NP_Cont PP;
ANP_Cont -> Adj<gnc-agr[1]>+ NP_Cont<gnc-agr[1], rt>;
//-------Перечисление (правая часть опр. с каждой новой строки, нумерованные списки)
NumDelim -> RBracket | Punct;
Number -> AnyWord<wff="\\d+">;
Ordered -> Number interp (Content.Marker) NumDelim;
LoseStrength -> 'утратить' 'сила'<gram="acc">;
EnumItem1 -> Ordered Content;
EnumItem1 -> Ordered NP_Cont interp (Content.KeyNP) (Limits interp (Content.Limitation));
EnumItem1 -> Ordered LoseStrength interp (Content.Repealed = 'true') AnyWord* interp (Content.Comment);
//-------Перечисление (правая часть на той же строке)-------
Btw -> Comma | Conj;
EnumItem -> NP_Cont interp (Content.KeyNP);
_EnumItem -> 'другой' NP_Cont interp (Content.KeyNP) Comma Comm interp (Content.Comment::norm="sg");
EnumItem -> EnumItem interp (Content.PlainText) Btw;
EnumIter -> EnumItem+ EnumItem interp (Content.PlainText) Comma Comm<gram="pl"> interp (Content.Comment::norm="sg");
EnumIter -> EnumItem<gram="sg">+ EnumItem<gram="sg"> interp (Content.PlainText) Comma Comm<gram="sg"> interp (Content.Comment);
EnumIter -> EnumItem+ _EnumItem interp (Content.PlainText);
EnumIter -> EnumItem+ EnumItem;
Enum -> EnumIter interp (Content.PlainText);
//------Правая часть без перечисления-----------
//Внутренние определения, не используются-------
Incl -> 'в' 'то'<gram="abl"> 'число'<gram="abl">;
Further -> 'далее' Hyphen;
InBrac -> Incl NP; //не надо интерпретировать
InBrac -> (Further) NP_Def interp (Definition.Term); //ПЕРЕД скобками нужно интерпретировать в Content
InBrac -> Enum; //ПЕРЕД скобками нужно интерпретировать в Def
InBrac -> EnumItem interp (Content.PlainText; Content.KeyNP);
//----------------------------------------------
InBrac -> NP Comma Comm;
LimBrac -> LBracket InBrac RBracket {weight=1.5};
LimBracCut -> LBracket<cut> InBrac RBracket<cut> {weight=1.5};
InClause -> BigNP;
Comm -> PartcpPhrase+ (Comma) (NP);
Comm -> PartcpPhrase<gnc-agr[1]> Btw PartcpPhrase<gnc-agr[1]>;
Comm -> (Noun) Subordinate;
Comm -> Comm LimBrac PPS;
Comm -> Comm Comma EnumNP;
Comm -> Comm Comma Comm;
Comm -> Comm Comma 'а' 'также' PPS;
NP_Cont -> Adj Comma Word<gram="ADV"> Adj Noun interp (Content.KeyWord);
Cont_stop -> Break | Comma;
Content -> NP_Cont<rt, gnc-agr[1], gram="n"> interp (Content.KeyNP::norm="sg") Comma Comm<gnc-agr[1]> interp (Content.Comment::norm="n,sg");
Content -> NP_Cont<rt, gnc-agr[1], gram="f"> interp (Content.KeyNP::norm="sg") Comma Comm<gnc-agr[1]> interp (Content.Comment::norm="f,sg");
Content -> NP_Cont<rt, gnc-agr[1]> interp (Content.KeyNP::norm="sg") Comma Comm<gnc-agr[1]> interp (Content.Comment);
Content -> NP_Cont<rt> interp (Content.KeyNP::norm="sg") (LimBracCut interp (Content.Limitation)) Comma Comm interp (Content.Comment::not_norm);
//без запятой
Content -> Noun<gram=~"ins"> interp (Content.KeyWord::norm="sg") InClause interp (Content.KeyNP);
PenalComm -> PP Word<gram="V"> BigNP;
PenalComm -> NP Word<gram="V"> BigNP;
PenalContent -> Comma<cut> 'если' PenalComm;
//-----------Корневые правила------------------------------------------
//---------------------------------------------------------------------
//---------------перечисление, нумеров. списки----
FullTerm1 -> FullTerm<fw> Colon interp (Definition.EnumExpected = 'true');
S -> FullTerm1 interp (Definition.PlainText);
S -> EnumItem1 interp (Content.PlainText) (Break);
//---------------перечисление, на той же строке---
FullTermInv -> DefPredInt Term interp (Definition.Term) (Limits interp (Definition.Limitation));
S -> FullTerm<fw> interp (Definition.PlainText) Enum;
S -> Enum<fw> FullTermInv interp (Definition.PlainText);
//---------------без перечисления-----------------
S -> FullTerm interp (Definition.PlainText) Content interp (Content.PlainText);
S -> Term2<fw> interp (Definition.PlainText) Comma Comm+ interp (Content.PlainText; Content.Comment); //Cont_stop;
//--------------для УК----------------------------
S -> PenalTerm interp (Definition.PlainText) PenalContent interp (Content.PlainText; Content.Comment);