MLW.ebnf 9.67 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

di68kap's avatar
di68kap committed
39
LemmaVariante     = LAT_WORT [Zusatz]
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
Bedeutungskategorie  = { EINZEILER [LZ] } [BedeutungsQualifikation] §":"
di68kap's avatar
di68kap committed
112
113
114
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 = Zusatz # "[" Gegenstand DPP (Verweis | EINZEILER) §"]"
120

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


di68kap's avatar
di68kap committed
124
#### VERWEIS-POSITION ########################################################
125

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


di68kap's avatar
di68kap committed
129
#### UNTER-ARTIKEL ###########################################################
130

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

di68kap's avatar
di68kap committed
140
#### STELLENVERZEICHNIS ######################################################
di68kap's avatar
di68kap committed
141

di68kap's avatar
di68kap committed
142
143
144
145
Stellenverzeichnis = ZWW "STELLENVERZEICHNIS" [LemmaWort] ZWW Verweisliste
Verweisliste       = { [LZ] "*" Stellenverweis }
Stellenverweis     = BelegQuelle { [ABS] Stelle (NullVerweis | Verweis) }
NullVerweis        = "{" "-" "}"
di68kap's avatar
di68kap committed
146

147

di68kap's avatar
di68kap committed
148
149
#### Schlüsselwörter #########################################################

di68kap's avatar
di68kap committed
150
151
152
LAT = "LATEINISCH" | "LAT"
DEU = "DEUTSCH" | "DEU"
GRI = "GRIECHISCH" | "GRIECH" | "GRIE" | "GRI"
di68kap's avatar
di68kap committed
153

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

di68kap's avatar
di68kap committed
156

di68kap's avatar
di68kap committed
157
158
#### ZUSATZ an verschiedenen Stellen der Struktur ############################

di68kap's avatar
di68kap committed
159
160
Zusatz       = { "{" !("=>" | "#") §EinzelnerZusatz { ";;" EinzelnerZusatz } "}" }+
  EinzelnerZusatz  = FesterZusatz | GemischterZusatz | FreierZusatz
di68kap's avatar
di68kap committed
161
162
163
  FesterZusatz     = "adde" | "sape" | "persaepe"
  GemischterZusatz = ( "usu" | "plur. sensu sing." ) FreierZusatz
  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] ["."]
di68kap's avatar
di68kap committed
170
Zitat            = Quellenangabe
di68kap's avatar
di68kap committed
171
                   { SEM [ZW] [Anker] [Zusatz] <Stelle | Verweis>
di68kap's avatar
di68kap committed
172
                     [[ZW] BelegText] [[LZ] Zusatz] }
di68kap's avatar
di68kap committed
173

di68kap's avatar
di68kap committed
174
175
Quellenangabe    = [<Anker | Zusatz>] < BelegQuelle | Verweis >
BelegQuelle      = Autor §DPP [Werk] &SEM
di68kap's avatar
di68kap committed
176
BelegText        = /"/ { MEHRZEILER | Zusatz } §/"/~ ["."]
177

di68kap's avatar
di68kap committed
178
179
Autor     = EINZEILER [<Anker | Verweis | Zusatz>]
Werk      = <EINZEILER [<Anker | Verweis | Zusatz>]>
di68kap's avatar
di68kap committed
180
181
182
Stelle    = EINZEILER
Datierung = EINZEILER
Edition   = EINZEILER
di68kap's avatar
di68kap committed
183

184

di68kap's avatar
di68kap committed
185
186
187
#### VERWEISE (LINKS) ########################################################

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

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


di68kap's avatar
di68kap committed
199
200
#### GENERISCHE UND ATOMARE AUSDRÜCKE ########################################

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

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

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

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

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

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

246
247
DATEI_ENDE       = !/./
NIEMALS          = /(?!.)/
di68kap's avatar
di68kap committed
248