2.12.2021, 9:00 - 11:00: Due to updates GitLab may be unavailable for some minutes between 09:00 and 11:00.

MLW.ebnf 6.25 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]
di68kap's avatar
di68kap committed
20
                    { SubArtikel }
di68kap's avatar
di68kap committed
21
                    ArtikelVerfasser
22
                    [LZ]  DATEI_ENDE
23

24

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

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

34
LemmaVarianten    = [LZ]
di68kap's avatar
di68kap committed
35
36
                    { LemmaVariante §TR }+
                    [Zusatz]
37

di68kap's avatar
di68kap committed
38
LemmaVariante     = LAT_WORT_TEIL { "-" LAT_WORT_TEIL }
39

40
## GRAMMATIK-POSITION ##
41

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

Grammatik        = §wortart ABS flexion [genus]
45

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

52
flexion          = FLEX { "," §FLEX }
53
FLEX             = /-?[a-z]+/~
54

di68kap's avatar
di68kap committed
55
56
57
genus            = "maskulinum" | "m."
                 | "femininum" | "f."
                 | "neutrum" | "n."
58

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

61

di68kap's avatar
di68kap committed
62
#### ETYMOLOGIE-POSITION #####################################################
63

di68kap's avatar
di68kap committed
64
65
66
67
EtymologiePosition = "ETYMOLOGIE" [LZ] { EtymologieVariante }+
EtymologieVariante = LAT | GRI [EtymologieBesonderheit] ["ETYM" Etymologie] DPP Beleg
EtymologieBesonderheit = FREITEXT
Etymologie         = FREITEXT
68
69


70
71
#### ARTIKEL-KOPF ############################################################

di68kap's avatar
di68kap committed
72
73
74
ArtikelKopf     = { SchreibweisenPosition | StrukturPosition
                  | GebrauchPosition | MetrikPosition | VerwechselungPosition }+

di68kap's avatar
di68kap committed
75
SchreibweisenPosition =  "SCHREIBWEISE" [LZ] §SWTyp DPP [LZ]
di68kap's avatar
di68kap committed
76
                         SWVariante { ABS SWVariante} [LZ]
di68kap's avatar
di68kap committed
77
SWTyp           = "script. fat-" | "script."
di68kap's avatar
di68kap committed
78
SWVariante      = Schreibweise DPP Beleg
79
Schreibweise    = ZEICHENFOLGE
80
81


di68kap's avatar
di68kap committed
82

83
84
#### BEDEUTUNGS-POSITION #####################################################

85
BedeutungsPosition = { "BEDEUTUNG" [LZ] §Bedeutung }+
86

87
Bedeutung       = (Interpretamente | Bedeutungskategorie) [Belege]
88
89
Bedeutungskategorie = /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~ [LZ]
Interpretamente = LateinischeBedeutung [LZ] §DeutscheBedeutung [LZ]
di68kap's avatar
di68kap committed
90
91
LateinischeBedeutung = SW_LAT /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~
DeutscheBedeutung = SW_DEU /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~
di68kap's avatar
di68kap committed
92

di68kap's avatar
di68kap committed
93
94
95
Belege          = "BELEGE" [LZ] (EinBeleg | { "*" EinBeleg }) ABS
EinBeleg        = { !([LZ] "*" | SCHLUESSELWORT) /\s*[^\n]*/~ [ZW] }+ [Zusatz]
Zusatz          = "ZUSATZ" /\s*.*/
96
97


98
99
#### AUTOR/AUTORIN ###########################################################

100
101
ArtikelVerfasser = ("AUTORIN" | "AUTOR") Name
Name             = { NAME | NAMENS_ABKÜRZUNG }+
102

103

di68kap's avatar
di68kap committed
104
105
106
#### Schlüsselwörter #########################################################

SW_LAT           = "LATEINISCH" | "LAT"
di68kap's avatar
di68kap committed
107
SW_DEU           = "DEUTSCH" | "DEU"
di68kap's avatar
di68kap committed
108
109
SW_GRIECH        = "GRIECHISCH" | "GRIECH" | "GRIE" | "GRI"

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

di68kap's avatar
di68kap committed
112

di68kap's avatar
di68kap committed
113
114
115
116
117
118
#### ZUSATZ an verschiedenen Stellen der Struktur ############################

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


di68kap's avatar
di68kap committed
119
#### BELEGE ##################################################################
120

di68kap's avatar
di68kap committed
121
122
123
Beleg            = (BelegQuelle BelegText) | BelegText | Verweis
BelegQuelle      = Autor DPP Werk SEM Stelle [SEM Datierung] [SEM Edition]
BelegText        = '"' FREITEXT '"'
124

di68kap's avatar
di68kap committed
125
126
Verweis          =  "->" ZielName
VerweisZiel      = "{" ZielName "}"
127
ZielName         = BUCHSTABENFOLGE
128

di68kap's avatar
di68kap committed
129
130
131

#### GENERISCHE UND ATOMARE AUSDRÜCKE ########################################

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

135
136
137
DEU_WORT         = /[A-ZÄÖÜ]?[a-zäöüß]+/~
DEU_GROSS        = /[A-ZÄÖÜ][a-zäöüß]+/~
DEU_KLEIN        = /[a-zäöüß]+/~
138
LAT_WORT         = /[a-z]+/~
139
LAT_WORT_TEIL    = /[a-z]+/
140
GROSSSCHRIFT     = /[A-ZÄÖÜ]+/~
di68kap's avatar
di68kap committed
141
142
ZAHL             = /\d+/~
ROEMISCHE_ZAHL   = /(?=[MDCLXVI])M*(C[MD]|D?C*)(X[CL]|L?X*)(I[XV]|V?I*)/~
di68kap's avatar
di68kap committed
143
144
145
SATZZEICHEN      = /(?:,(?!,))|(?:;(?!;))|(?::(?!:))|[.()-]+/~  # div. Satzzeichen, aber keine doppelten ,, ;; oder ::

FREITEXT         = { DEU_WORT | ZAHL | ROEMISCHE_ZAHL | SATZZEICHEN | /s*/ }+
146

147
148
BUCHSTABENFOLGE  = /\w+/~
ZEICHENFOLGE     = /[\w()-]+/~
149

di68kap's avatar
di68kap committed
150
151
152
153
154
155
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
156

di68kap's avatar
di68kap committed
157
158
159
160
161
162
163
164
165
166
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

167
168
DATEI_ENDE       = !/./
NIEMALS          = /(?!.)/
di68kap's avatar
di68kap committed
169

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