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

@ comment       =  /#.*(?:\n|$)/    # Kommentare beginnen mit '#' und reichen bis zum Zeilenende
4
@ whitespace    =  /[\t ]*/         # Zeilensprünge zählen nicht als Leerraum
5
6
@ literalws     =  both             # Leerraum vor und nach Literalen wird automatisch entfernt

7
8
9

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

10
Artikel         = [LEER]
11
12
13
                  §LemmaPosition [ArtikelKopf]
                  §BedeutungsPosition
                  §Autorinfo
14
15
16
17
18
19
20
                  [LEER]  DATEI_ENDE


#### LEMMA-POSITION ##########################################################

LemmaPosition   = "LEMMA"  §Lemma  [LemmaVarianten]  §GrammatikPosition

di68kap's avatar
di68kap committed
21
22
23
Lemma           = [klassisch] [gesichert] WORT_KLEIN [LEER]
  klassisch     = "*"
  gesichert     = "$"
24

25
26
LemmaVarianten  = "VARIANTEN" [LEER]
                  §LVariante  { TRENNER LVariante }
27
                  [TRENNER LVZusatz] [TRENNER]
di68kap's avatar
di68kap committed
28

di68kap's avatar
di68kap committed
29
LVariante       = ~/(?:[a-z]|-)+/~      # Buchstabenfolge mit Trennzeichen "-"
di68kap's avatar
di68kap committed
30
31
LVZusatz        = "ZUSATZ" zs_typ
  zs_typ        = "sim."
32
33
34
35
36



#### GRAMMATIK-POSITION ######################################################

di68kap's avatar
di68kap committed
37
38
GrammatikPosition = "GRAMMATIK" [LEER] §wortart §TRENNER §Flexion [genus]
                    {GrammatikVariante} [TRENNER]
39

di68kap's avatar
di68kap committed
40
wortart         = "nomen"  | "n." |
41
42
43
44
                  "verb"   | "v." |
                  "adverb" | "adv." |
                  "adjektiv" | "adj."

di68kap's avatar
di68kap committed
45
46
GrammatikVariante = TRENNER GVariante
GVariante       = Flexionen  [genus]  ":"  Beleg
47

di68kap's avatar
di68kap committed
48
Flexion         = Flexion { "," §Flexion }
49
Flexion         = /-?[a-z]+/~
50

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



#### ARTIKEL-KOPF ############################################################

ArtikelKopf     = SchreibweisenPosition
60
61
SchreibweisenPosition =  "SCHREIBWEISE" [LEER] §SWTyp ":" [LEER]
                         §SWVariante { TRENNER SWVariante} [LEER]
62
SWTyp           = "script." | "script. fat-"
63
SWVariante      = Schreibweise ":" Beleg
di68kap's avatar
di68kap committed
64
Schreibweise    = "vizreg-" | "festregel(a)" | "fezdregl(a)" | "fat-"
65

66
Beleg           = Verweis
67
Verweis         = ~/\w+/~
68
VerweisZiel     = ~/<\w+>/~
69
70
71
72


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

di68kap's avatar
di68kap committed
73
BedeutungsPosition = { "BEDEUTUNG" [LEER] §Bedeutung }+
74

75
Bedeutung       = (Interpretamente | Bedeutungskategorie) [Belege]
76
77
Bedeutungskategorie = /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~ [LEER]
Interpretamente = LateinischeBedeutung [LEER] §DeutscheBedeutung [LEER]
78
79
LateinischeBedeutung = "LAT" /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~
DeutscheBedeutung = "DEU" /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~
80
Belege          = "BELEGE" [LEER] { "*" EinBeleg }
81
82
EinBeleg        = { !([LEER] ("*" | "BEDEUTUNG" | "AUTOR" | "NAME" | "ZUSATZ"))
                    /\s*.*\s*/ }+
di68kap's avatar
di68kap committed
83
                  [Zusatz]
di68kap's avatar
di68kap committed
84
Zusatz          = "ZUSATZ" /\s*.*/ TRENNER
85
86


87
88
89
#### AUTOR/AUTORIN ###########################################################

Autorinfo       = ("AUTORIN" | "AUTOR") Name
90
91
Name            = WORT { WORT | NAMENS_ABKÜRZUNG }

92

93
#### ATOMARE AUSDRÜCKE #######################################################
94

95
NAMENS_ABKÜRZUNG = /[A-ZÄÖÜÁÀ]\./
96

97
98
99
100
101
WORT             = /[A-ZÄÖÜ]?[a-zäöüß]+/~
WORT_GROSS       = /[A-ZÄÖÜ][a-zäöüß]+/~
WORT_KLEIN       = /[a-zäöüß]+/~
LAT_WORT         = /[a-z]+/~
GROSSSCHRIFT     = /[A-ZÄÖÜ]+/~
102

103
104
TRENNER          = /\s*;\s*/ | { ZSPRUNG }+
ZSPRUNG          = /\n/~
di68kap's avatar
di68kap committed
105

106
107
108
LEER             = /\s+/        # horizontaler und(!) vertikaler Leerraum
DATEI_ENDE       = !/./
NIEMALS          = /(?!.)/
di68kap's avatar
di68kap committed
109