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

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

7
8
9

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

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


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

20
LemmaPosition     = "LEMMA" [LZ]  §HauptLemma [LemmaVarianten] §GrammatikPosition
21

22
23
24
HauptLemma        = [klassisch] [gesichert] lemma
  klassisch       = "*"
  gesichert       = "$"
25

26
27
LemmaVarianten   = { (LZ|TR) lemma }+
                   [ (LZ|TR) LemmaZusatz] [LZ]
di68kap's avatar
di68kap committed
28

29
lemma           = LAT_WORT_TEIL { ("|" | "-") LAT_WORT_TEIL }
30

31
32
LemmaZusatz     = "ZUSATZ" lzs_typ
  lzs_typ       = "sim."
33
34


35
## GRAMMATIK-POSITION ##
36

37
38
GrammatikPosition = "GRAMMATIK" [LZ] §wortart §TR §Flexion [genus]
                    {GrammatikVariante} [TR]
39

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

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

48
Flexionen       = 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" [LZ] §SWTyp ":" [LZ]
                         §SWVariante { TR SWVariante} [LZ]
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 #####################################################

73
BedeutungsPosition = { "BEDEUTUNG" [LZ] §Bedeutung }+
74

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


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

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

92

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

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

98
99
100
DEU_WORT         = /[A-ZÄÖÜ]?[a-zäöüß]+/~
DEU_GROSS        = /[A-ZÄÖÜ][a-zäöüß]+/~
DEU_KLEIN        = /[a-zäöüß]+/~
101
LAT_WORT         = /[a-z]+/~
102
LAT_WORT_TEIL    = /[a-z]+/
103
GROSSSCHRIFT     = /[A-ZÄÖÜ]+/~
104

105
106
TR               = /\s*;\s*/ | { NEUE_ZEILE }+  # Trenner
NEUE_ZEILE       = /\n/~
di68kap's avatar
di68kap committed
107

108
LZ               = /\s+/                        # Leerzeichen oder -zeilen
109
110
DATEI_ENDE       = !/./
NIEMALS          = /(?!.)/
di68kap's avatar
di68kap committed
111