MLW.ebnf 9.3 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
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 = Zusatz # "[" 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


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
141
142
143
#### STELLENVERWEISE #########################################################

# TODO: Syntax für Stellenverweise

144

di68kap's avatar
di68kap committed
145
146
#### Schlüsselwörter #########################################################

di68kap's avatar
di68kap committed
147
148
149
LAT = "LATEINISCH" | "LAT"
DEU = "DEUTSCH" | "DEU"
GRI = "GRIECHISCH" | "GRIECH" | "GRIE" | "GRI"
di68kap's avatar
di68kap committed
150

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

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
158
Zusatz       = { "{" !("=>" | "#") §EinzelnerZusatz { ";;" EinzelnerZusatz } "}" }+
  EinzelnerZusatz  = FesterZusatz | GemischterZusatz | FreierZusatz
di68kap's avatar
di68kap committed
159
160
161
  FesterZusatz     = "adde" | "sape" | "persaepe"
  GemischterZusatz = ( "usu" | "plur. sensu sing." ) FreierZusatz
  FreierZusatz     = { FREITEXT | VerweisKern | Verweis }+
di68kap's avatar
di68kap committed
162

163

di68kap's avatar
di68kap committed
164
#### BELEGE ##################################################################
165

di68kap's avatar
di68kap committed
166
Belege           = ["*"] Beleg { [LZ] "*" Beleg }
di68kap's avatar
di68kap committed
167
Beleg            = [Zusatz] (Verweis [Zitat]) | Zitat ["."]
di68kap's avatar
di68kap committed
168
Zitat            = Quellenangabe
di68kap's avatar
di68kap committed
169
                   { SEM [ZW] [Anker] [Zusatz] <Stelle | Verweis>
di68kap's avatar
di68kap committed
170
171
                     [[ZW] BelegText] [[TR] Zusatz] }

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

di68kap's avatar
di68kap committed
176
177
178
179
180
Autor     = EINZEILER
Werk      = EINZEILER
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
188
189
190
191
192
193
194
195
196
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
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_WORT_ERW     = DEU_WORT | ( "(" DEU_WORT ")" )
di68kap's avatar
di68kap committed
204
205
206
DEU_GROSS        = /[A-ZÄÖÜ][a-zäöüßę_\-]+/~
GROSSBUCHSTABE   = /[A-ZÄÖÜ](?=[ \t\n])/~
KLEINBUCHSTABE   = /[a-zäöü](?=[ \t\n])/~
di68kap's avatar
di68kap committed
207
GRI_BUCHSTABE    = /[αβγδεζηθικλμνξοπρςστυφχψω]/
di68kap's avatar
di68kap committed
208
209
DEU_KLEIN        = /(?!-)[a-zäöüßę_\-]+/~
LAT_WORT         = /(?!-)[a-z|\-_]+/~
di68kap's avatar
di68kap committed
210
LAT_WORT_ERW     = LAT_WORT | ( "(" LAT_WORT ")" )
di68kap's avatar
di68kap committed
211
212
213
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
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
221
# EINZEILER        = /[\w()-. \t]+/~
TEXTELEMENT      = DEU_WORT | ZAHL | ROEMISCHE_ZAHL
di68kap's avatar
di68kap committed
222
EINZEILER        = { TEXTELEMENT | TEIL_SATZZEICHEN }+
di68kap's avatar
di68kap committed
223
224
FREITEXT         = { TEXTELEMENT | SATZZEICHEN | GROSSSCHRIFT }+
MEHRZEILER       = { FREITEXT | /\s+(?=[\w,;:.\(\)\-])/ }+
225

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

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

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

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