MLW.ebnf 8.71 KB
Newer Older
1
2
# EBNF-Syntax für MLW-Artikel

di68kap's avatar
di68kap committed
3
4
# TODO: Vervollständigen!!!!

5

di68kap's avatar
di68kap committed
6
7
@ comment         =  /#.*/            # Kommentare beginnen mit '#' und reichen bis zum Zeilenende
                                      # ohne das Zeilenende zu beinhalten
8
9
@ whitespace      =  /[\t ]*/         # Zeilensprünge zählen nicht als Leerraum
@ literalws       =  right            # Leerraum vor und nach Literalen wird automatisch entfernt
10

11
12
13

##############################################################################

14
Artikel           = [LZ]
di68kap's avatar
di68kap committed
15
16
                    §{ LemmaPosition }+
                    [EtymologiePosition]
17
                    [ArtikelKopf]
di68kap's avatar
di68kap committed
18
                    BedeutungsPosition
di68kap's avatar
di68kap committed
19
                    [VerweisPosition]
20
                    { UnterArtikel }
di68kap's avatar
di68kap committed
21
                    ArtikelVerfasser
22
                    [LZ]  DATEI_ENDE
23

24

25
26
#### LEMMA-POSITION ##########################################################

di68kap's avatar
di68kap committed
27
28
LemmaPosition     = [ABS] "LEMMA" [LZ] §Lemma TR [LemmaVarianten]
                    GrammatikPosition [Zusatz]
29

di68kap's avatar
di68kap committed
30
Lemma             = [< klassisch | gesichert >] LemmaWort
31
  klassisch       = "*"
di68kap's avatar
di68kap committed
32
  gesichert       = "$"  # TODO: Noch fragen: Welches Zeichen?
33

di68kap's avatar
di68kap committed
34
35
LemmaWort         = LAT_WORT

di68kap's avatar
di68kap committed
36
LemmaVarianten    = LemmaVariante { [","] [ZW] LemmaVariante }
di68kap's avatar
di68kap committed
37
                    [[TR] Zusatz]
38

39
LemmaVariante     = LAT_WORT
40

41

42
## GRAMMATIK-POSITION ##
43

di68kap's avatar
di68kap committed
44
GrammatikPosition = ZWW "GRAMMATIK" [LZ] §Grammatik { ABS GrammatikVariante }
di68kap's avatar
di68kap committed
45

46
Grammatik        = wortart §ABS flexion [genus]
47

di68kap's avatar
di68kap committed
48
49
50
51
52
wortart          = "nomen"  | "n."
                 | "verb"   | "v."
                 | "adverb" | "adv."
                 | "adjektiv" | "adj."
                 | "praeposition" | "praep."
53

54
flexion          = deklination | konjugation
di68kap's avatar
di68kap committed
55
deklination      = FLEX ["," FLEX]
56
konjugation      = FLEX
57
FLEX             = /-?[a-z]+/~
58

di68kap's avatar
di68kap committed
59
60
61
genus            = "maskulinum" | "m."
                 | "femininum" | "f."
                 | "neutrum" | "n."
62

63
GrammatikVariante  = [wortart ABS] flexion [genus] DPP Beleg { FORTSETZUNG Beleg }   # Beleg { SEM Beleg }
di68kap's avatar
di68kap committed
64

65

66

di68kap's avatar
di68kap committed
67
#### ETYMOLOGIE-POSITION #####################################################
68

di68kap's avatar
di68kap committed
69
EtymologiePosition = ZWW "ETYMOLOGIE" [LZ] { EtymologieVariante }+
di68kap's avatar
di68kap committed
70
EtymologieVariante = LAT | GRI [EtymologieBesonderheit] ["ETYM" Etymologie] DPP Beleg
di68kap's avatar
di68kap committed
71
72
EtymologieBesonderheit = EINZEILER
Etymologie         = EINZEILER
73
74


75
76
#### ARTIKEL-KOPF ############################################################

di68kap's avatar
di68kap committed
77
78
79
80
81
ArtikelKopf     = <   SchreibweisenPosition
                    | StrukturPosition
                    | GebrauchPosition
                    | MetrikPosition
                    | VerwechselungPosition >
di68kap's avatar
di68kap committed
82

di68kap's avatar
di68kap committed
83
84
85
86
87
SchreibweisenPosition = ZWW "SCHREIBWEISE"  Position
StrukturPosition      = ZWW "STRUKTUR"      Position
GebrauchPosition      = ZWW "GEBRAUCH"      Position
MetrikPosition        = ZWW "METRIK"        Position
VerwechselungPosition = ZWW "VERWECHSELBAR" Position
di68kap's avatar
di68kap committed
88

di68kap's avatar
di68kap committed
89
## ARTIKELKOPF POSITIONEN ##
di68kap's avatar
di68kap committed
90

di68kap's avatar
di68kap committed
91
92
93
94
95
96
97
Position       = [LZ] §Kategorien
Kategorien     = Kategorie { ZWW Kategorie }
Kategorie      = Besonderheit §DPP [LZ] ( Varianten | Kategorien )
Besonderheit   = EINZEILER
Varianten      = Variante { ZWW Variante }
Variante       = !KATEGORIENZEILE Gegenstand DPP Belege
Gegenstand     = EINZEILER
di68kap's avatar
di68kap committed
98

di68kap's avatar
di68kap committed
99

100
101
#### BEDEUTUNGS-POSITION #####################################################

di68kap's avatar
di68kap committed
102
BedeutungsPosition   = { ZWW "BEDEUTUNG" [LZ] §Bedeutung [U1Bedeutung] }+
di68kap's avatar
di68kap committed
103
104
U1Bedeutung          = { ZWW ("U_BEDEUTUNG" | "UNTER_BEDEUTUNG") [LZ] §Bedeutung [U2Bedeutung] }+
U2Bedeutung          = { ZWW ("UU_BEDEUTUNG" | "UNTER_UNTER_BEDEUTUNG") [LZ] §Bedeutung [U3Bedeutung] }+
105
106
107
U3Bedeutung          = { ZWW "UUU_BEDEUTUNG" [LZ] §Bedeutung [U4Bedeutung] }+
U4Bedeutung          = { ZWW "UUUU_BEDEUTUNG" [LZ] §Bedeutung [U5Bedeutung] }+
U5Bedeutung          = { ZWW "UUUUU_BEDEUTUNG" [LZ] §UntersteBedeutung }+
108

di68kap's avatar
di68kap committed
109
Bedeutung            = (Interpretamente | Bedeutungskategorie) [BelegPosition]
di68kap's avatar
di68kap committed
110
UntersteBedeutung    = Interpretamente [BelegPosition]
di68kap's avatar
di68kap committed
111
112
113
114
Bedeutungskategorie  = EINZEILER [[LZ] BedeutungsQualifikation] §":"
Interpretamente      = LateinischeBedeutung ("--"| LZ) §DeutscheBedeutung [":"]
LateinischeBedeutung = LAT [LZ] LateinischerAusdruck { <","|ZW> LateinischerAusdruck }
DeutscheBedeutung    = DEU [LZ] DeutscherAusdruck { <","|ZW> DeutscherAusdruck }
di68kap's avatar
di68kap committed
115

di68kap's avatar
di68kap committed
116
117
LateinischerAusdruck = LAT_WORT_ERW { //~ LAT_WORT_ERW } [[LZ] BedeutungsQualifikation]
DeutscherAusdruck    = DEU_WORT_ERW { //~ DEU_WORT_ERW } [[LZ] BedeutungsQualifikation]
118

di68kap's avatar
di68kap committed
119
BedeutungsQualifikation = "[" Gegenstand DPP (Verweis | EINZEILER) §"]"
120

di68kap's avatar
di68kap committed
121
BelegPosition = ZWW ["BELEGE" [LZ]] Belege
122
123
124
125


#### VERWEIS-POSITION #####################################################

di68kap's avatar
di68kap committed
126
VerweisPosition = ZWW "VERWEISE"
127
128
129
130


#### UNTER-ARTIKEL ########################################################

di68kap's avatar
di68kap committed
131
UnterArtikel = ZWW "UNTER-ARTIKEL"
132
133


134
135
#### AUTOR/AUTORIN ###########################################################

di68kap's avatar
di68kap committed
136
ArtikelVerfasser = ZWW ("AUTORIN" | "AUTOR") Name
137
Name             = { NAME | NAMENS_ABKÜRZUNG }+
138

139

140

di68kap's avatar
di68kap committed
141
142
#### Schlüsselwörter #########################################################

di68kap's avatar
di68kap committed
143
144
145
LAT = "LATEINISCH" | "LAT"
DEU = "DEUTSCH" | "DEU"
GRI = "GRIECHISCH" | "GRIECH" | "GRIE" | "GRI"
di68kap's avatar
di68kap committed
146

di68kap's avatar
di68kap committed
147
148
SCHLUESSELWORT   = { //~ /\n/ }+ !ROEMISCHE_ZAHL /[A-ZÄÖÜ]{3,}\s+/

di68kap's avatar
di68kap committed
149

150

di68kap's avatar
di68kap committed
151
152
#### ZUSATZ an verschiedenen Stellen der Struktur ############################

di68kap's avatar
di68kap committed
153
154
Zusatz       = "ZUSATZ" §{ [TR] zusatz_typ }+
  zusatz_typ = "adde" | "al" | "sim." | "saepe" | "vel-rarius" | "vel" | EINZEILER
di68kap's avatar
di68kap committed
155

di68kap's avatar
di68kap committed
156
157
Präfix       = "PRÄFIX" §{ [TR] präfix_typ }+ ":"
  präfix_typ = EINZEILER
158

di68kap's avatar
di68kap committed
159
#### BELEGE ##################################################################
160

di68kap's avatar
di68kap committed
161
Belege           = ["*"] Beleg { [LZ] "*" Beleg }
di68kap's avatar
di68kap committed
162
163
164
165
166
Beleg            = [Präfix] (Verweis [Zitat]) | Zitat
Zitat            = Quellenangabe
                   { SEM [ZW] [Anker] [Präfix] <Stelle | Verweis>
                     [[ZW] BelegText] [[TR] Zusatz] }

di68kap's avatar
di68kap committed
167
Quellenangabe    = [Anker] < BelegQuelle | Verweis >
di68kap's avatar
di68kap committed
168
BelegQuelle      = Autor DPP Werk
di68kap's avatar
di68kap committed
169
BelegText        = /"/ MEHRZEILER §/"/~ ["."]
170

di68kap's avatar
di68kap committed
171
172
173
Verweis          = "->" §Anker
Anker            = "{" ZielID §"}"
ZielID           = FREITEXT
174

di68kap's avatar
di68kap committed
175
176
177
178
179
Autor     = EINZEILER
Werk      = EINZEILER
Stelle    = EINZEILER
Datierung = EINZEILER
Edition   = EINZEILER
di68kap's avatar
di68kap committed
180

181

di68kap's avatar
di68kap committed
182
183
#### GENERISCHE UND ATOMARE AUSDRÜCKE ########################################

184
185
NAMENS_ABKÜRZUNG = /[A-ZÄÖÜÁÀÂÓÒÔÚÙÛ]\./~
NAME             = /[A-ZÄÖÜÁÀÓÒÚÙÂÔÛ][a-zäöüßáàâóòôúùû]+/~
186

di68kap's avatar
di68kap committed
187
DEU_WORT         = DEU_GROSS | DEU_KLEIN | GROSSBUCHSTABE
di68kap's avatar
di68kap committed
188
DEU_WORT_ERW     = DEU_WORT | ( "(" DEU_WORT ")" )
di68kap's avatar
di68kap committed
189
190
191
DEU_GROSS        = /[A-ZÄÖÜ][a-zäöüßę_\-]+/~
GROSSBUCHSTABE   = /[A-ZÄÖÜ](?=[ \t\n])/~
KLEINBUCHSTABE   = /[a-zäöü](?=[ \t\n])/~
di68kap's avatar
di68kap committed
192
GRI_BUCHSTABE    = /[αβγδεζηθικλμνξοπρςστυφχψω]/
di68kap's avatar
di68kap committed
193
194
DEU_KLEIN        = /(?!-)[a-zäöüßę_\-]+/~
LAT_WORT         = /(?!-)[a-z|\-_]+/~
di68kap's avatar
di68kap committed
195
LAT_WORT_ERW     = LAT_WORT | ( "(" LAT_WORT ")" )
di68kap's avatar
di68kap committed
196
197
198
GROSSSCHRIFT     = /(?!-)[A-ZÄÖÜ_\-]+/~
ZAHL             = /[\d_]+/~
ROEMISCHE_ZAHL   = /(?=[MDCLXVI])M*(C[MD]|D?C*)(X[CL]|L?X*)(I[XV]|V?I*)(?=[^\w])/~
di68kap's avatar
di68kap committed
199

di68kap's avatar
di68kap committed
200
201
SATZZEICHEN      = /(?!->)(?:(?:,(?!,))|(?:;(?!;))|(?::(?!:))|(?:-(?!-))|[.()\[\]]+)/~  # div. Satzzeichen, aber keine doppelten ,, ;; oder ::
TEIL_SATZZEICHEN = /(?!->)(?:(?:,(?!,))|(?:-(?!-))|[.()]+)/~ # Satzeichen bis auf Doppelpunkt ":", Semikolon ";" und eckige Klammern
di68kap's avatar
di68kap committed
202

203
204
BUCHSTABENFOLGE  = /\w+/~
ZEICHENFOLGE     = /[\w()-]+/~
di68kap's avatar
di68kap committed
205
206
# EINZEILER        = /[\w()-. \t]+/~
TEXTELEMENT      = DEU_WORT | ZAHL | ROEMISCHE_ZAHL
di68kap's avatar
di68kap committed
207
EINZEILER        = { TEXTELEMENT | TEIL_SATZZEICHEN }+
di68kap's avatar
di68kap committed
208
209
FREITEXT         = { TEXTELEMENT | SATZZEICHEN | GROSSSCHRIFT }+
MEHRZEILER       = { FREITEXT | /\s+(?=[\w,;:.\(\)\-])/ }+
210

di68kap's avatar
di68kap committed
211
TR               = ABS | LZ                  # (beliebiger) Trenner
di68kap's avatar
di68kap committed
212
ABS              = /\s*;;?\s*/ | ZWW         # Abschluss (durch Semikolon oder Zeilenwechsel)
di68kap's avatar
di68kap committed
213
# ZW               = /\n/~                   # Zeilenwechsel
di68kap's avatar
di68kap committed
214
LZ               = { COMMENT__ | /\s+/ }+    # Leerzeichen oder -zeilen
di68kap's avatar
di68kap committed
215
216
DPP              = /::?/~                    # Doppelpunkt als Trenner
SEM              = /;;?/~                    # Semikolon als Trenner
di68kap's avatar
di68kap committed
217

di68kap's avatar
di68kap committed
218
ZW               = !LÜCKE ZEILENSPRUNG       # Zeilenwechsel, aber keine Leerzeile(n)
di68kap's avatar
di68kap committed
219
220
ZWW              = ZEILENSPRUNG [ LZ ]       # mindestens ein Zeilenwechsel
LÜCKE            = KOMMENTARZEILEN LEERZEILE [LZ] # Leerraum mit mindestens einer echten Leerzeile
di68kap's avatar
di68kap committed
221
222
223
224
225
LEERZEILE        = /[ \t]*(?:\n[ \t]*)+\n/ ~/\n?/ # eine oder mehrere echte LEERZEILEN
RZS              = /\s*?\n|$/               # Rückwärtiger Zeilensprung oder Textanfang

ZEILENSPRUNG     = /[ \t]*\n/~
KOMMENTARZEILEN  = { /[ \t]*\n?[ \t]*/ COMMENT__ }  # echte Kommentarzeilen
226
KATEGORIENZEILE  = /[^:\n]+[:][ \t]*\n/     # Kategorienzeilen enthalten genau einen Doppelpunkt am Ende der Zeile
227
FORTSETZUNG      = !(ZWW /[^:\n]+[:]/)
di68kap's avatar
di68kap committed
228

229
230
DATEI_ENDE       = !/./
NIEMALS          = /(?!.)/
di68kap's avatar
di68kap committed
231

232
DUMMY            = "EBNF-Grammatik an dieser Stelle noch nicht definiert!"