# EBNF-Syntax für MLW-Artikel # TODO: Vervollständigen!!!! @ comment = /(?:\/\/.*)|(?:\/\*(?:.|\n)*?\*\/)/ # Kommentare im C++ Stil # ohne das Zeilenende zu beinhalten @ whitespace = /[\t ]*/ # Zeilensprünge zählen nicht als Leerraum @ literalws = right # Leerraum vor und nach Literalen wird automatisch entfernt ############################################################################## Artikel = [LZ] §{ LemmaPosition }+ [EtymologiePosition] [ArtikelKopf] BedeutungsPosition [VerweisPosition] { UnterArtikel } ArtikelVerfasser [Stellenverzeichnis] [LZ] DATEI_ENDE #### LEMMA-POSITION ########################################################## LemmaPosition = [ABS] "LEMMA" [LZ] §Lemma TR [LemmaVarianten] GrammatikPosition [Zusatz] Lemma = [< klassisch | gesichert >] LemmaWort klassisch = "*" gesichert = "$" # TODO: Noch fragen: Welches Zeichen? LemmaWort = LAT_WORT LemmaVarianten = LemmaVariante { [";" | ","] [ZW] LemmaVariante } [ ABS Zusatz ] LemmaVariante = LAT_WORT [Zusatz] ## GRAMMATIK-POSITION ## GrammatikPosition = ZWW "GRAMMATIK" [LZ] §Grammatik { ABS GrammatikVariante } Grammatik = wortart §ABS flexion [genus] wortart = "nomen" | "n." | "verb" | "v." | "adverb" | "adv." | "adjektiv" | "adj." | "praeposition" | "praep." flexion = deklination | konjugation deklination = FLEX ["," FLEX] konjugation = FLEX FLEX = /-?[a-z]+/~ genus = "maskulinum" | "m." | "femininum" | "f." | "neutrum" | "n." GrammatikVariante = [wortart ABS] flexion [genus] DPP Beleg { FORTSETZUNG Beleg } # Beleg { SEM Beleg } #### ETYMOLOGIE-POSITION ##################################################### EtymologiePosition = ZWW "ETYMOLOGIE" [LZ] { EtymologieVariante }+ EtymologieVariante = LAT | GRI [EtymologieBesonderheit] ["ETYM" Etymologie] DPP Beleg EtymologieBesonderheit = EINZEILER Etymologie = EINZEILER #### ARTIKEL-KOPF ############################################################ ArtikelKopf = < SchreibweisenPosition | StrukturPosition | GebrauchPosition | MetrikPosition | VerwechselungPosition > SchreibweisenPosition = ZWW "SCHREIBWEISE" Position StrukturPosition = ZWW "STRUKTUR" Position GebrauchPosition = ZWW "GEBRAUCH" Position MetrikPosition = ZWW "METRIK" Position VerwechselungPosition = ZWW "VERWECHSELBAR" Position ## ARTIKELKOPF POSITIONEN ## Position = [LZ] §Kategorien Kategorien = Kategorie { ZWW Kategorie } Kategorie = Besonderheit §DPP [LZ] ( Varianten | Kategorien ) Besonderheit = EINZEILER Varianten = Variante { ZWW Variante } Variante = !KATEGORIENZEILE Gegenstand DPP Belege Gegenstand = EINZEILER #### BEDEUTUNGS-POSITION ##################################################### BedeutungsPosition = { ZWW "BEDEUTUNG" [LZ] §Bedeutung [U1Bedeutung] }+ U1Bedeutung = { ZWW ("U_BEDEUTUNG" | "UNTER_BEDEUTUNG") [LZ] §Bedeutung [U2Bedeutung] }+ U2Bedeutung = { ZWW ("UU_BEDEUTUNG" | "UNTER_UNTER_BEDEUTUNG") [LZ] §Bedeutung [U3Bedeutung] }+ U3Bedeutung = { ZWW "UUU_BEDEUTUNG" [LZ] §Bedeutung [U4Bedeutung] }+ U4Bedeutung = { ZWW "UUUU_BEDEUTUNG" [LZ] §Bedeutung [U5Bedeutung] }+ U5Bedeutung = { ZWW "UUUUU_BEDEUTUNG" [LZ] §UntersteBedeutung }+ Bedeutung = (Interpretamente | Bedeutungskategorie) [BelegPosition] UntersteBedeutung = Interpretamente [BelegPosition] Bedeutungskategorie = { EINZEILER [LZ] [Zusatz] [LZ] } §":" Interpretamente = LateinischeBedeutung ("--"| LZ) §DeutscheBedeutung [":"] LateinischeBedeutung = LAT [LZ] [Zusatz] LateinischerAusdruck DeutscheBedeutung = DEU [LZ] [Zusatz] DeutscherAusdruck LateinischerAusdruck = LAT_WORT { [ZW] ((/[,;]?/~ [ZW] (LAT_WORT | ("(" LateinischerAusdruck ")"))) | Zusatz) } DeutscherAusdruck = DEU_WORT { [ZW] ((/[,;]?/~ [ZW] (DEU_WORT | ("(" DeutscherAusdruck")"))) | Zusatz) } # LateinischerAusdruck = LAT_WORT_ERW { //~ LAT_WORT_ERW } [[LZ] BedeutungsQualifikation] # DeutscherAusdruck = DEU_WORT_ERW { //~ DEU_WORT_ERW } [[LZ] BedeutungsQualifikation] # LateinischerAusdruck = LAT_WORT [[LZ] BedeutungsQualifikation] # DeutscherAusdruck = DEU_WORT [[LZ] BedeutungsQualifikation] BelegPosition = ZWW ["BELEGE" [LZ]] Belege #### VERWEIS-POSITION ######################################################## VerweisPosition = ZWW "VERWEISE" #### UNTER-ARTIKEL ########################################################### UnterArtikel = ZWW "UNTER-ARTIKEL" #### AUTOR/AUTORIN ########################################################### ArtikelVerfasser = ZWW ("AUTORIN" | "AUTOR") §Name Name = { NAME | NAMENS_ABKÜRZUNG | "unbekannt" }+ #### STELLENVERZEICHNIS ###################################################### Stellenverzeichnis = ZWW "STELLENVERZEICHNIS" [LemmaWort] ZWW Verweisliste Verweisliste = { [LZ] "*" Stellenverweis } Stellenverweis = BelegQuelle { [ABS] Stelle (NullVerweis | Verweis) } NullVerweis = "{" "-" "}" #### Schlüsselwörter ######################################################### LAT = "LATEINISCH" | "LAT" DEU = "DEUTSCH" | "DEU" GRI = "GRIECHISCH" | "GRIECH" | "GRIE" | "GRI" SCHLUESSELWORT = { //~ /\n/ }+ !ROEMISCHE_ZAHL /[A-ZÄÖÜ]{3,}\s+/ #### ZUSATZ an verschiedenen Stellen der Struktur ############################ Zusatz = { "{" !("=>" | "#") §EinzelnerZusatz { ";;" EinzelnerZusatz } "}" }+ EinzelnerZusatz = FesterZusatz | GemischterZusatz | FreierZusatz FesterZusatz = "adde" | "sape" | "persaepe" GemischterZusatz = ( "usu" | "plur. sensu sing." ) FreierZusatz FreierZusatz = { FREITEXT | VerweisKern | Verweis }+ #### BELEGE ################################################################## Belege = ["*"] Beleg { [LZ] "*" Beleg } Beleg = [Zusatz] ((Verweis [Zitat]) | Zitat) [ABS Zusatz] ["."] Zitat = Quellenangabe { SEM [ZW] [Anker] [Zusatz] [[ZW] BelegText] [[LZ] Zusatz] } Quellenangabe = [] < BelegQuelle | Verweis > BelegQuelle = Autor §DPP [Werk] &SEM BelegText = /"/ { MEHRZEILER | Zusatz } §/"/~ ["."] Autor = EINZEILER [] Werk = ]> Stelle = EINZEILER Datierung = EINZEILER Edition = EINZEILER #### VERWEISE (LINKS) ######################################################## Verweis = "{" VerweisKern "}" VerweisKern = "=>" §((alias "|" ("-" | URL)) | URL) Anker = "{" "#" §ziel "}" URL = [ ([protokoll] domäne /\//) | /\// ] { pfad /\// } ziel alias = FREITEXT protokoll = /\w+:\/\// domäne = /\w+\.\w+(?:\.\w+)*/ pfad = /\w+/ ziel = /[\w=?.%&\[\] ]+/ #### GENERISCHE UND ATOMARE AUSDRÜCKE ######################################## NAMENS_ABKÜRZUNG = /[A-ZÄÖÜÁÀÂÓÒÔÚÙÛ]\./~ NAME = /[A-ZÄÖÜÁÀÓÒÚÙÂÔÛ][a-zäöüßáàâóòôúùû]+/~ DEU_WORT = DEU_GROSS | DEU_KLEIN | GROSSBUCHSTABE # DEU_WORT_ERW = DEU_WORT | (["("] DEU_WORT [")"]) DEU_GROSS = /[A-ZÄÖÜ][a-zäöüßę_\-.]+/~ GROSSBUCHSTABE = /[A-ZÄÖÜ](?=[ \t\n])/~ KLEINBUCHSTABE = /[a-zäöü](?=[ \t\n])/~ GRI_BUCHSTABE = /[αβγδεζηθικλμνξοπρςστυφχψω]/ DEU_KLEIN = /(?!--)[a-zäöüßęõ_\-.]+/~ LAT_WORT = /(?!--)[a-z|\-_.]+/~ # LAT_WORT_ERW = LAT_WORT | (["("] LAT_WORT [")"]) GROSSSCHRIFT = /(?!--)[A-ZÄÖÜ_\-]+/~ ZAHL = /[\d]+/~ SEITENZAHL = /[\d]+(?:\^(?:(?:\{[\d\w.]+\})|\w))?/~ # Zahl mit optionale folgendem hochgestelltem Buchstaben oder Text ROEMISCHE_ZAHL = /(?=[MDCLXVI])M*(C[MD]|D?C*)(X[CL]|L?X*)(I[XV]|V?I*)(?=[^\w])/~ SATZZEICHEN = /(?!->)(?:(?:,(?!,))|(?:;(?!;))|(?::(?!:))|(?:-(?!-))|[.()\[\]]+)|[`''‘’?]/~ # div. Satzzeichen, aber keine doppelten ,, ;; oder :: TEIL_SATZZEICHEN = /(?!->)(?:(?:,(?!,))|(?:-(?!-))|[.()]+)|[`''‘’?]/~ # Satzeichen bis auf Doppelpunkt ":", Semikolon ";" und eckige Klammern BUCHSTABENFOLGE = /\w+/~ ZEICHENFOLGE = /[\w()-]+/~ TEXTELEMENT = DEU_WORT | SEITENZAHL | ROEMISCHE_ZAHL EINZEILER = { TEXTELEMENT | TEIL_SATZZEICHEN }+ FREITEXT = { TEXTELEMENT | SATZZEICHEN | GROSSSCHRIFT }+ MEHRZEILER = { FREITEXT | /\s+(?=[\w,;:.\(\)\-])/ }+ TR = ABS | LZ # (beliebiger) Trenner ABS = /\s*;;?\s*/ | ZWW # Abschluss (durch Semikolon oder Zeilenwechsel) # ZW = /\n/~ # Zeilenwechsel LZ = { COMMENT__ | /\s+/ }+ # Leerzeichen oder -zeilen DPP = /::?/~ # Doppelpunkt als Trenner SEM = /;;?/~ # Semikolon als Trenner ZW = !LÜCKE ZEILENSPRUNG # Zeilenwechsel, aber keine Leerzeile(n) ZWW = ZEILENSPRUNG [ LZ ] # mindestens ein Zeilenwechsel LÜCKE = KOMMENTARZEILEN LEERZEILE [LZ] # Leerraum mit mindestens einer echten Leerzeile 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 KATEGORIENZEILE = /[^:\n]+[:][ \t]*\n/ # Kategorienzeilen enthalten genau einen Doppelpunkt am Ende der Zeile FORTSETZUNG = !(ZWW /[^:\n]+[:]/) DATEI_ENDE = !/./ NIEMALS = /(?!.)/