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

3
4
@ testing = True

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

10
11
12

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

13
14
15
16
Artikel           = [LZ]
                    §LemmaPosition
                    [ArtikelKopf]
                    §BedeutungsPosition
17
                    §ArtikelVerfasser
18
                    [LZ]  DATEI_ENDE
19

20

21
22
#### LEMMA-POSITION ##########################################################

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

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

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

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

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


40
## GRAMMATIK-POSITION ##
41

42
43
GrammatikPosition = "GRAMMATIK" [LZ] §wortart §ABS §flexion [genus] §ABS
                    [GrammatikVarianten]
44

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

51
GrammatikVarianten = { [wortart ABS] flexion [genus]  ":"  Beleg §ABS }+
52

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

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


61
62
## ETYMOLOGIE-POSITION ##

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


68
69
70
#### ARTIKEL-KOPF ############################################################

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


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

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

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

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


93
94
#### AUTOR/AUTORIN ###########################################################

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

98

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

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


106
107
108
109
#### GENERISCHE UND ATOMARE AUSDRÜCKE ########################################

Beleg            = Verweis

110
Verweis          = "->" ZielName
111
VerweisZiel      = "[" ZielName "]"
112
ZielName         = BUCHSTABENFOLGE
113

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

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

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

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

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

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