Starting from 2021-07-01, all LRZ GitLab users will be required to explicitly accept the GitLab Terms of Service. Please see the detailed information at https://doku.lrz.de/display/PUBLIC/GitLab and make sure that your projects conform to the requirements.

MLW.ebnf 5.48 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
                    BedeutungsPosition
di68kap's avatar
di68kap committed
16 17
                    [VerweisPosition]
                    { SubArtikel }+
di68kap's avatar
di68kap committed
18
                    ArtikelVerfasser
19
                    [LZ]  DATEI_ENDE
20

21

22 23
#### LEMMA-POSITION ##########################################################

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

di68kap's avatar
di68kap committed
27
Lemma             = [< klassisch | gesichert >] LemmaWort
28 29
  klassisch       = "*"
  gesichert       = "$"
30

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

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

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


41
## GRAMMATIK-POSITION ##
42

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

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

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

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

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


62 63
## ETYMOLOGIE-POSITION ##

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


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

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

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


di68kap's avatar
di68kap committed
81

82 83
#### BEDEUTUNGS-POSITION #####################################################

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

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

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


97 98
#### AUTOR/AUTORIN ###########################################################

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

102

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

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

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

di68kap's avatar
di68kap committed
111

di68kap's avatar
di68kap committed
112
#### BELEGE ##################################################################
113

di68kap's avatar
di68kap committed
114
Beleg            = InternerVerweis | ExternerVerweis
115

Gacia's avatar
Gacia committed
116
Verweis          =  ZielName
117
VerweisZiel      = "[" ZielName "]"
118
ZielName         = BUCHSTABENFOLGE
119

di68kap's avatar
di68kap committed
120 121 122

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

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

126 127 128
DEU_WORT         = /[A-ZÄÖÜ]?[a-zäöüß]+/~
DEU_GROSS        = /[A-ZÄÖÜ][a-zäöüß]+/~
DEU_KLEIN        = /[a-zäöüß]+/~
129
LAT_WORT         = /[a-z]+/~
130
LAT_WORT_TEIL    = /[a-z]+/
131
GROSSSCHRIFT     = /[A-ZÄÖÜ]+/~
di68kap's avatar
di68kap committed
132 133
ZAHL             = /\d+/~
ROEMISCHE_ZAHL   = /(?=[MDCLXVI])M*(C[MD]|D?C*)(X[CL]|L?X*)(I[XV]|V?I*)/~
134

135 136
BUCHSTABENFOLGE  = /\w+/~
ZEICHENFOLGE     = /[\w()-]+/~
137

di68kap's avatar
di68kap committed
138 139 140 141
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
142

di68kap's avatar
di68kap committed
143 144 145 146 147 148 149 150 151 152
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

153 154
DATEI_ENDE       = !/./
NIEMALS          = /(?!.)/
di68kap's avatar
di68kap committed
155

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