MLW.ebnf 5.05 KB
Newer Older
1
2
# EBNF-Syntax für MLW-Artikel

3

di68kap's avatar
di68kap committed
4
5
@ comment         =  /#.*/            # Kommentare beginnen mit '#' und reichen bis zum Zeilenende
                                      # ohne das Zeilenende zu beinhalten
6
7
@ whitespace      =  /[\t ]*/         # Zeilensprünge zählen nicht als Leerraum
@ literalws       =  right            # Leerraum vor und nach Literalen wird automatisch entfernt
8

9
10
11

##############################################################################

12
13
14
Artikel           = [LZ]
                    §LemmaPosition
                    [ArtikelKopf]
di68kap's avatar
di68kap committed
15
16
                    BedeutungsPosition
                    ArtikelVerfasser
17
                    [LZ]  DATEI_ENDE
18

19

20
21
#### LEMMA-POSITION ##########################################################

di68kap's avatar
di68kap committed
22
23
LemmaPosition     = "LEMMA" [LZ] §Lemma TR [LemmaVarianten]
                    GrammatikPosition [EtymologiePosition]
24

25
Lemma             = [klassisch] [gesichert] LemmaWort
26
27
  klassisch       = "*"
  gesichert       = "$"
28

29
LemmaVarianten    = [LZ]
30
                    { LemmaWort §TR }+
31
                    [LemmaZusatz §ABS]
di68kap's avatar
di68kap committed
32

33
LemmaWort         = LAT_WORT_TEIL { ("|" | "-") LAT_WORT_TEIL }
34

35
36
LemmaZusatz       = "ZUSATZ" §lzs_typ
  lzs_typ         = /sim\./
37
38


39
## GRAMMATIK-POSITION ##
40

di68kap's avatar
di68kap committed
41
GrammatikPosition = "GRAMMATIK" [LZ] §wortart ABS flexion [genus] ABS
42
                    [GrammatikVarianten]
43

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

50
GrammatikVarianten = { [wortart ABS] flexion [genus]  ":"  Beleg §ABS }+
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
59


60
61
## ETYMOLOGIE-POSITION ##

di68kap's avatar
di68kap committed
62
EtymologiePosition = "ETYMOLOGIE" [LZ] EtymologieVarianten
di68kap's avatar
di68kap committed
63
64
EtymologieVarianten = { !([LZ] GROSSFOLGE) EtymologieVariante }+
EtymologieVariante = /.*/   # NOCH ZU VERFOLLSTÄNDIGEN
65
66


67
68
69
#### ARTIKEL-KOPF ############################################################

ArtikelKopf     = SchreibweisenPosition
70
SchreibweisenPosition =  "SCHREIBWEISE" [LZ] §SWTyp ":" [LZ]
di68kap's avatar
di68kap committed
71
                         SWVariante { ABS SWVariante} [LZ]
72
SWTyp           = "script." | "script. fat-"
73
SWVariante      = Schreibweise ":" Beleg
74
Schreibweise    = ZEICHENFOLGE
75
76
77
78


#### BEDEUTUNGS-POSITION #####################################################

79
BedeutungsPosition = { "BEDEUTUNG" [LZ] §Bedeutung }+
80

81
Bedeutung       = (Interpretamente | Bedeutungskategorie) [Belege]
82
83
Bedeutungskategorie = /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~ [LZ]
Interpretamente = LateinischeBedeutung [LZ] §DeutscheBedeutung [LZ]
di68kap's avatar
di68kap committed
84
85
LateinischeBedeutung = SW_LAT /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~
DeutscheBedeutung = SW_DEU /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~
di68kap's avatar
di68kap committed
86
87
88

Belege          = "BELEGE" [LZ] (EinBeleg | { "*" EinBeleg })
EinBeleg        = { !([LZ] ("*" | GROSSFOLGE )) /\s*[^\n]*\s*/ }+ [Zusatz]
89
Zusatz          = "ZUSATZ" /\s*.*/ ABS
90
91


92
93
#### AUTOR/AUTORIN ###########################################################

94
95
ArtikelVerfasser = ("AUTORIN" | "AUTOR") Name
Name             = { NAME | NAMENS_ABKÜRZUNG }+
96

97

di68kap's avatar
di68kap committed
98
99
100
101
102
103
104
#### Schlüsselwörter #########################################################

SW_LAT           = "LATEINISCH" | "LAT"
SW_DEU           = "DEUTSCH" | "DEUT"
SW_GRIECH        = "GRIECHISCH" | "GRIECH" | "GRIE" | "GRI"


105
106
#### GENERISCHE UND ATOMARE AUSDRÜCKE ########################################

Gacia's avatar
Gacia committed
107
Beleg            = ["->"] Verweis
108

Gacia's avatar
Gacia committed
109
Verweis          =  ZielName
110
VerweisZiel      = "[" ZielName "]"
111
ZielName         = BUCHSTABENFOLGE
112

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

116
117
118
DEU_WORT         = /[A-ZÄÖÜ]?[a-zäöüß]+/~
DEU_GROSS        = /[A-ZÄÖÜ][a-zäöüß]+/~
DEU_KLEIN        = /[a-zäöüß]+/~
119
LAT_WORT         = /[a-z]+/~
120
LAT_WORT_TEIL    = /[a-z]+/
121
GROSSSCHRIFT     = /[A-ZÄÖÜ]+/~
di68kap's avatar
di68kap committed
122
GROSSFOLGE       = /[A-ZÄÖÜ][A-ZÄÖÜ][A-ZÄÖÜ]/   # drei Großbuchstaben in Folge
123

124
125
BUCHSTABENFOLGE  = /\w+/~
ZEICHENFOLGE     = /[\w()-]+/~
126

di68kap's avatar
di68kap committed
127
128
129
130
TR               = ABS | LZ                     # (beliebiger) Trenner
ABS              = /\s*;\s*/ | { ZWW }+         # Abschluss (durch Semikolon oder Zeilenwechsel)
# ZW               = /\n/~                        # Zeilenwechsel
LZ               = /\s+/                        # Leerzeichen oder -zeilen
di68kap's avatar
di68kap committed
131

di68kap's avatar
di68kap committed
132
133
134
135
136
137
138
139
140
141
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

142
143
DATEI_ENDE       = !/./
NIEMALS          = /(?!.)/