MLW.ebnf 8.19 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
27
#### LEMMA-POSITION ##########################################################

di68kap's avatar
di68kap committed
28
LemmaPosition     = "LEMMA" [LZ] §Lemma TR [LemmaVarianten]
di68kap's avatar
di68kap committed
29
                    GrammatikPosition [Zusatz] [ABS]
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

37
LemmaVarianten    = [LZ]
di68kap's avatar
di68kap committed
38
39
                    { LemmaVariante §TR }+
                    [Zusatz]
40

di68kap's avatar
di68kap committed
41
LemmaVariante     = LAT_WORT_TEIL { "-" LAT_WORT_TEIL }
42

43

44
## GRAMMATIK-POSITION ##
45

46
GrammatikPosition = "GRAMMATIK" [LZ] §Grammatik ABS { GrammatikVariante §ABS }
di68kap's avatar
di68kap committed
47

48
Grammatik        = wortart §ABS flexion [genus]
49

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

56
57
58
flexion          = deklination | konjugation
deklination      = FLEX §"," FLEX
konjugation      = FLEX
59
FLEX             = /-?[a-z]+/~
60

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

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

67

68

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

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


77

78
79
#### ARTIKEL-KOPF ############################################################

80
ArtikelKopf     = <   SchreibweisenPosition | StrukturPosition | GebrauchPosition
di68kap's avatar
di68kap committed
81
                    | MetrikPosition | VerwechselungsPosition >
di68kap's avatar
di68kap committed
82

83
84
85
86
87
88
## Schreibweisen-Position ##

# TODO: Ggf. noch zu ergänzen um: Zusatz, Mehrere Tyen innerhalb der Schreibweisen-Position.

SchreibweisenPosition =  "SCHREIBWEISE" [LZ] { SWKategorie }+

di68kap's avatar
di68kap committed
89
90
SWKategorie      = SWTyp DPP [LZ] §(Varianten | { SWKategorie }+) [LZ]
SWTyp            = scriptfat | scriptform | script | form | gen | abl | OFFEN
91
92
93
94
95
96

scriptfat  = "script." "fat-"
scriptform = "script. " "form"
script     = "srcipt."
form       = "form"

di68kap's avatar
di68kap committed
97
98
99
100
101
gen        = "gen."
abl        = "abl."

OFFEN      = FREITEXT

102
103
104

#### STRUKTUR-POSITION #######################################################

di68kap's avatar
di68kap committed
105
106
107
108
109
110
111
112
113
114
115
StrukturPosition = "STRUKTUR" [LZ] { STKategorie }+
STKategorie      = STTyp DPP [LZ] §(Varianten | { STKategorie }+) [LZ]
STTyp            = "form." ZEICHENFOLGE


#### GEBRAUCH-POSITION #######################################################

GebrauchPosition = "GEBRAUCH"


#### METRIK-POSITION #########################################################
116

di68kap's avatar
di68kap committed
117
MetrikPosition = "METRIK"
118
119


di68kap's avatar
di68kap committed
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#### VERWECHSLUNGS-POSITION ##################################################

VerwechslungsPosition  = "VERWECHSELBAR" [LZ] [Confunditur]
                         VerwechselungsVariante { ABS VerwechselungsVariante }+ [LZ]
Confunditur            = "confunditur c." DPP [LZ]
VerwechselungsVariante = !KATEGORIENZEILE Verwechselung DPP Beleg
Verwechselung          = ZEICHENFOLGE


#### ARTIKELKOPF POSITIONEN VARIANTEN ########################################

Varianten              = Variante { ABS Variante }
Variante               = !KATEGORIENZEILE Gegenstand DPP Beleg
Gegenstand             = ZEICHENFOLGE

di68kap's avatar
di68kap committed
135

136
#### BEDEUTUNGS-POSITION #####################################################
di68kap's avatar
di68kap committed
137
##############################################################################
138

139
BedeutungsPosition = { "BEDEUTUNG" [LZ] §Bedeutung }+
140

141
Bedeutung       = (Interpretamente | Bedeutungskategorie) [Belege]
142
143
Bedeutungskategorie = /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~ [LZ]
Interpretamente = LateinischeBedeutung [LZ] §DeutscheBedeutung [LZ]
di68kap's avatar
di68kap committed
144
145
LateinischeBedeutung = LAT /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~
DeutscheBedeutung = DEU /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~
di68kap's avatar
di68kap committed
146

di68kap's avatar
di68kap committed
147
148
Belege          = "BELEGE" [LZ] (EinBeleg | { "*" EinBeleg }) ABS
EinBeleg        = { !([LZ] "*" | SCHLUESSELWORT) /\s*[^\n]*/~ [ZW] }+ [Zusatz]
149
150
151
152
153
154
155
156
157
158


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

VerweisPosition = "VERWEISE"


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

UnterArtikel = "UNTER-ARTIKEL"
159
160


161
162
#### AUTOR/AUTORIN ###########################################################

163
164
ArtikelVerfasser = ("AUTORIN" | "AUTOR") Name
Name             = { NAME | NAMENS_ABKÜRZUNG }+
165

166

167

di68kap's avatar
di68kap committed
168
169
#### Schlüsselwörter #########################################################

di68kap's avatar
di68kap committed
170
171
172
LAT = "LATEINISCH" | "LAT"
DEU = "DEUTSCH" | "DEU"
GRI = "GRIECHISCH" | "GRIECH" | "GRIE" | "GRI"
di68kap's avatar
di68kap committed
173

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

di68kap's avatar
di68kap committed
176

177

di68kap's avatar
di68kap committed
178
179
180
181
182
183
#### ZUSATZ an verschiedenen Stellen der Struktur ############################

Zusatz       = "ZUSATZ" §{ zusatz_typ [TR] }+
  zusatz_typ = "adde" | "al" | "sim." | "saepe" | "vel-rarius" | "vel" | FREITEXT


184

di68kap's avatar
di68kap committed
185
#### BELEGE ##################################################################
186

di68kap's avatar
di68kap committed
187
188
189
Beleg            = (BelegQuelle BelegText) | BelegText | Verweis
BelegQuelle      = Autor DPP Werk SEM Stelle [SEM Datierung] [SEM Edition]
BelegText        = '"' FREITEXT '"'
190

di68kap's avatar
di68kap committed
191
192
Verweis          =  "->" ZielName
VerweisZiel      = "{" ZielName "}"
193
ZielName         = BUCHSTABENFOLGE
194

di68kap's avatar
di68kap committed
195
196
197
198
199
Autor     = FREITEXT
Werk      = FREITEXT
Stelle    = FREITEXT
Datierung = FREITEXT
Edition   = FREITEXT
di68kap's avatar
di68kap committed
200

201

di68kap's avatar
di68kap committed
202
203
#### GENERISCHE UND ATOMARE AUSDRÜCKE ########################################

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

207
208
209
DEU_WORT         = /[A-ZÄÖÜ]?[a-zäöüß]+/~
DEU_GROSS        = /[A-ZÄÖÜ][a-zäöüß]+/~
DEU_KLEIN        = /[a-zäöüß]+/~
210
LAT_WORT         = /[a-z]+/~
211
LAT_WORT_TEIL    = /[a-z]+/
212
GROSSSCHRIFT     = /[A-ZÄÖÜ]+/~
di68kap's avatar
di68kap committed
213
214
ZAHL             = /\d+/~
ROEMISCHE_ZAHL   = /(?=[MDCLXVI])M*(C[MD]|D?C*)(X[CL]|L?X*)(I[XV]|V?I*)/~
di68kap's avatar
di68kap committed
215

di68kap's avatar
di68kap committed
216
217
218
219
220
SATZZEICHEN      = /(?:,(?!,))|(?:;(?!;))|(?::(?!:))|[.()\-]+/~  # div. Satzzeichen, aber keine doppelten ,, ;; oder ::

TEXTELEMENT      = DEU_WORT | ZAHL | ROEMISCHE_ZAHL
FREITEXT         = { TEXTELEMENT | /[.()\-\s]+/ | /,(?!,)\s*/ }+
ERW_FREITEXT     = { TEXTELEMENT | SATZZEICHEN | /\s+/ }+
221

222
223
BUCHSTABENFOLGE  = /\w+/~
ZEICHENFOLGE     = /[\w()-]+/~
224

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

di68kap's avatar
di68kap committed
232
233
234
235
236
237
238
239
240
ZW               = !LÜCKE ZEILENSPRUNG       # Zeilenwechsel, aber keine Leerzeile(n)
ZWW              = ZEILENSPRUNG [ LEERRAUM ] # mindestens ein Zeilenwechsel
LÜCKE            = KOMMENTARZEILEN LEERZEILE [LEERRAUM] # Leerraum mit mindestens einer echten Leerzeile
LEERRAUM         = { COMMENT__ | /\s+/ }+   # beliebiger horizontaler oder vertikaler Leerraum
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
di68kap's avatar
di68kap committed
242

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

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