MLW.ebnf 9.72 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
@ comment         =  /(?:\/\/.*)|(?:\/\*(?:.|\n)*?\*\/)/   # Kommentare im C++ Stil
di68kap's avatar
di68kap committed
7
                                      # 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
di68kap's avatar
di68kap committed
22
23
                    [Stellenverzeichnis]
                    [LZ] DATEI_ENDE
24

25

26
27
#### LEMMA-POSITION ##########################################################

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

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

di68kap's avatar
di68kap committed
35
36
LemmaWort         = LAT_WORT

di68kap's avatar
di68kap committed
37
LemmaVarianten    = LemmaVariante { [";" | ","] [ZW] LemmaVariante } [ ABS Zusatz ]
38

39
LemmaVariante     = LAT_WORT [Zusatz]   # Ist eine Lemma immer ein einzelnes 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

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

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

eckhart's avatar
eckhart committed
60
61
62
63
genus            = maskulinum | femininum | neutrum
maskulinum       = "maskulinum" | "m."
femininum        = "femininum" | "f."
neutrum          = "neutrum" | "n."
64

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

67

68

di68kap's avatar
di68kap committed
69
#### ETYMOLOGIE-POSITION #####################################################
70

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


77
78
#### ARTIKEL-KOPF ############################################################

di68kap's avatar
di68kap committed
79
80
ArtikelKopf     = <   SchreibweisenPosition
                    | StrukturPosition
di68kap's avatar
di68kap committed
81
                    | GebrauchsPosition
di68kap's avatar
di68kap committed
82
                    | MetrikPosition
di68kap's avatar
di68kap committed
83
                    | VerwechselungsPosition >
di68kap's avatar
di68kap committed
84

di68kap's avatar
di68kap committed
85
86
SchreibweisenPosition = ZWW "SCHREIBWEISE"  Position
StrukturPosition      = ZWW "STRUKTUR"      Position
di68kap's avatar
di68kap committed
87
GebrauchsPosition     = ZWW "GEBRAUCH"      Position
di68kap's avatar
di68kap committed
88
MetrikPosition        = ZWW "METRIK"        Position
di68kap's avatar
di68kap committed
89
VerwechselungsPosition = ZWW "VERWECHSELBAR" Position
di68kap's avatar
di68kap committed
90

di68kap's avatar
di68kap committed
91
## ARTIKELKOPF POSITIONEN ##
di68kap's avatar
di68kap committed
92

di68kap's avatar
di68kap committed
93
94
95
96
97
98
99
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
100

di68kap's avatar
di68kap committed
101

102
103
#### BEDEUTUNGS-POSITION #####################################################

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

di68kap's avatar
di68kap committed
111
Bedeutung            = (Interpretamente | Bedeutungskategorie) [BelegPosition]
di68kap's avatar
di68kap committed
112
UntersteBedeutung    = Interpretamente [BelegPosition]
113
Bedeutungskategorie  = { EINZEILER [LZ] [Zusatz] [LZ] } §":"
114
115
116
117

Interpretamente      = LateinischeBedeutung (LZ | " " | "--") §DeutscheBedeutung [":"]
LateinischeBedeutung = LAT [ZW] LateinischerAusdruck { "," LateinischerAusdruck }
DeutscheBedeutung    = DEU [ZW] DeutscherAusdruck { "," DeutscherAusdruck }
118
119
120
121
LateinischerAusdruck = { <LateinischesWort [Zusatz]> }+
DeutscherAusdruck    = { <DeutschesWort [Zusatz]> }+
LateinischesWort     = (LAT_WORT | "(" { LAT_WORT }+ ")")
DeutschesWort        = (DEU_WORT | "(" { DEU_WORT }+ ")")
122
123
124
125
126

LAT = "LATEINISCH" | "LAT"
DEU = "DEUTSCH" | "DEU"
GRI = "GRIECHISCH" | "GRIECH" | "GRIE" | "GRI"

127

di68kap's avatar
di68kap committed
128
BelegPosition = ZWW ["BELEGE" [LZ]] Belege
129
130


di68kap's avatar
di68kap committed
131
#### VERWEIS-POSITION ########################################################
132

di68kap's avatar
di68kap committed
133
VerweisPosition = ZWW "VERWEISE"
134
135


di68kap's avatar
di68kap committed
136
#### UNTER-ARTIKEL ###########################################################
137

di68kap's avatar
di68kap committed
138
UnterArtikel = ZWW "UNTER-ARTIKEL"
139
140


141
142
#### AUTOR/AUTORIN ###########################################################

143
ArtikelVerfasser = ZWW ("AUTORIN" | "AUTOR") §Name
eckhart's avatar
eckhart committed
144
145
Name             = { NAME | NAMENS_ABKÜRZUNG | unbekannt }+
unbekannt        = "unbekannt"
146

di68kap's avatar
di68kap committed
147
#### STELLENVERZEICHNIS ######################################################
di68kap's avatar
di68kap committed
148

di68kap's avatar
di68kap committed
149
150
151
152
Stellenverzeichnis = ZWW "STELLENVERZEICHNIS" [LemmaWort] ZWW Verweisliste
Verweisliste       = { [LZ] "*" Stellenverweis }
Stellenverweis     = BelegQuelle { [ABS] Stelle (NullVerweis | Verweis) }
NullVerweis        = "{" "-" "}"
di68kap's avatar
di68kap committed
153

154

di68kap's avatar
di68kap committed
155
156
#### ZUSATZ an verschiedenen Stellen der Struktur ############################

di68kap's avatar
di68kap committed
157
Zusatz       = { "{" !("=>" | "@" | "^") §EinzelnerZusatz { ";;" EinzelnerZusatz } "}" }+  # mehrteilige Zusätze unnötig
di68kap's avatar
di68kap committed
158
  EinzelnerZusatz  = FesterZusatz | GemischterZusatz | FreierZusatz
di68kap's avatar
di68kap committed
159
  FesterZusatz     = "adde" | "sape" | "persaepe"
di68kap's avatar
di68kap committed
160
161
162
  GemischterZusatz = ( GebrauchsHinweis | PlurSingHinweis ) FreierZusatz
  GebrauchsHinweis = "usu"
  PlurSingHinweis  = "plur. sensu sing."
di68kap's avatar
di68kap committed
163
  FreierZusatz     = { FREITEXT | VerweisKern | Verweis }+
di68kap's avatar
di68kap committed
164

165

di68kap's avatar
di68kap committed
166
#### BELEGE ##################################################################
167

di68kap's avatar
di68kap committed
168
Belege           = ["*"] Beleg { [LZ] "*" Beleg }
di68kap's avatar
di68kap committed
169
Beleg            = [Zusatz] ((Verweis [Zitat]) | Zitat) [ABS Zusatz] ["."]
170
Zitat            = Quellenangabe { SEM [ZW] BelegStelle }
di68kap's avatar
di68kap committed
171
172
Quellenangabe    = [<Anker | Zusatz>] < BelegQuelle | Verweis >
BelegQuelle      = Autor §DPP [Werk] &SEM
173
BelegStelle      = [<Anker | Zusatz>] (Stelle [[ZW] BelegText] | Verweis) [[ZW] Zusatz]
di68kap's avatar
di68kap committed
174
BelegText        = /"/ { MEHRZEILER | Anker | Zusatz } §/"/~ ["."]
175

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

182

di68kap's avatar
di68kap committed
183
184
185
#### VERWEISE (LINKS) ########################################################

Verweis          = "{" VerweisKern "}"
di68kap's avatar
di68kap committed
186
VerweisKern      = "=>" §((alias "|" ("-" | URL)) | URL)
di68kap's avatar
di68kap committed
187
Anker            = "{" "@" §ziel "}"
di68kap's avatar
di68kap committed
188
189
190
191
192
193
194
195
196
URL              = [ ([protokoll] domäne /\//) | /\// ] { pfad /\// } ziel

alias            = FREITEXT
protokoll        = /\w+:\/\//
domäne           = /\w+\.\w+(?:\.\w+)*/
pfad             = /\w+/
ziel             = /[\w=?.%&\[\] ]+/


di68kap's avatar
di68kap committed
197
198
#### GENERISCHE UND ATOMARE AUSDRÜCKE ########################################

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

di68kap's avatar
di68kap committed
202
DEU_WORT         = DEU_GROSS | DEU_KLEIN | GROSSBUCHSTABE
di68kap's avatar
di68kap committed
203
DEU_GROSS        = /[A-ZÄÖÜ][a-zäöüßę_\-.]+/~
di68kap's avatar
di68kap committed
204
205
GROSSBUCHSTABE   = /[A-ZÄÖÜ](?=[ \t\n])/~
KLEINBUCHSTABE   = /[a-zäöü](?=[ \t\n])/~
di68kap's avatar
di68kap committed
206
GRI_BUCHSTABE    = /[αβγδεζηθικλμνξοπρςστυφχψω]/
di68kap's avatar
di68kap committed
207
208
209
DEU_KLEIN        = /(?!--)[a-zäöüßęõ_\-.]+/~
LAT_WORT         = /(?!--)[a-z|\-_.]+/~
GROSSSCHRIFT     = /(?!--)[A-ZÄÖÜ_\-]+/~
di68kap's avatar
di68kap committed
210
ZAHL             = /[\d]+/~
di68kap's avatar
di68kap committed
211
SEITENZAHL       = /[\d]+(?:\^(?:(?:\{[\d\w.,!? ]+\})|[\d\w.]+))?/~     # Zahl mit optionale folgendem hochgestelltem Buchstaben oder Text
di68kap's avatar
di68kap committed
212
ROEMISCHE_ZAHL   = /(?=[MDCLXVI])M*(C[MD]|D?C*)(X[CL]|L?X*)(I[XV]|V?I*)(?=[^\w])/~
213
SCHLUESSELWORT   = { //~ /\n/ }+ !ROEMISCHE_ZAHL /[A-ZÄÖÜ]{3,}\s+/
di68kap's avatar
di68kap committed
214

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

218
219
BUCHSTABENFOLGE  = /\w+/~
ZEICHENFOLGE     = /[\w()-]+/~
di68kap's avatar
di68kap committed
220
TEXTELEMENT      = DEU_WORT | SEITENZAHL | ROEMISCHE_ZAHL
di68kap's avatar
di68kap committed
221
EINZEILER        = { TEXTELEMENT | TEIL_SATZZEICHEN }+
di68kap's avatar
di68kap committed
222
223
FREITEXT         = { TEXTELEMENT | SATZZEICHEN | GROSSSCHRIFT }+
MEHRZEILER       = { FREITEXT | /\s+(?=[\w,;:.\(\)\-])/ }+
224

di68kap's avatar
di68kap committed
225
TR               = ABS | LZ                  # (beliebiger) Trenner
di68kap's avatar
di68kap committed
226
ABS              = /\s*;;?\s*/ | ZWW         # Abschluss (durch Semikolon oder Zeilenwechsel)
di68kap's avatar
di68kap committed
227
# ZW               = /\n/~                   # Zeilenwechsel
di68kap's avatar
di68kap committed
228
LZ               = { COMMENT__ | /\s+/ }+    # Leerzeichen oder -zeilen
di68kap's avatar
di68kap committed
229
230
DPP              = /::?/~                    # Doppelpunkt als Trenner
SEM              = /;;?/~                    # Semikolon als Trenner
di68kap's avatar
di68kap committed
231

di68kap's avatar
di68kap committed
232
ZW               = !LÜCKE ZEILENSPRUNG       # Zeilenwechsel, aber keine Leerzeile(n)
di68kap's avatar
di68kap committed
233
234
ZWW              = ZEILENSPRUNG [ LZ ]       # mindestens ein Zeilenwechsel
LÜCKE            = KOMMENTARZEILEN LEERZEILE [LZ] # Leerraum mit mindestens einer echten Leerzeile
di68kap's avatar
di68kap committed
235
236
237
238
239
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
240
KATEGORIENZEILE  = /[^:\n]+[:][ \t]*\n/     # Kategorienzeilen enthalten genau einen Doppelpunkt am Ende der Zeile
241
FORTSETZUNG      = !(ZWW /[^:\n]+[:]/)
di68kap's avatar
di68kap committed
242

243
244
DATEI_ENDE       = !/./
NIEMALS          = /(?!.)/
di68kap's avatar
di68kap committed
245