2.12.2021, 9:00 - 11:00: Due to updates GitLab may be unavailable for some minutes between 09:00 and 11:00.

Commit 7fdfefd8 authored by di68kap's avatar di68kap
Browse files

- MLW alle Tests repariert!

parent 8cc1d9da
...@@ -161,7 +161,7 @@ class HistoryRecord: ...@@ -161,7 +161,7 @@ class HistoryRecord:
(self.line_col[0], self.line_col[1], self.stack, str(self.node)) (self.line_col[0], self.line_col[1], self.stack, str(self.node))
def err_msg(self) -> str: def err_msg(self) -> str:
return self.ERROR + ": " + "; ".join(str(e) for e in self.node._errors).replace('\n', '\\') return self.ERROR + ": " + "; ".join(str(e) for e in self.node._errors) # .replace('\n', '\\')
@property @property
def stack(self) -> str: def stack(self) -> str:
...@@ -899,7 +899,7 @@ class Grammar: ...@@ -899,7 +899,7 @@ class Grammar:
def prepare_line(record): def prepare_line(record):
excerpt = self.document__.text.__getitem__(record.extent)[:25].replace('\n', '\\n') excerpt = self.document__.text.__getitem__(record.extent)[:25].replace('\n', '\\n')
excerpt = "'%s'" % excerpt if len(excerpt) < 25 else "'%s...'" % excerpt excerpt = "'%s'" % excerpt if len(excerpt) < 25 else "'%s...'" % excerpt
return record.stack, record.status, excerpt return [item for item in (record.stack, record.status, excerpt) if item]
def write_log(history, log_name): def write_log(history, log_name):
path = os.path.join(log_dir(), log_name + "_parser.log") path = os.path.join(log_dir(), log_name + "_parser.log")
...@@ -916,6 +916,8 @@ class Grammar: ...@@ -916,6 +916,8 @@ class Grammar:
if not log_file_name: if not log_file_name:
name = self.__class__.__name__ name = self.__class__.__name__
log_file_name = name[:-7] if name.lower().endswith('grammar') else name log_file_name = name[:-7] if name.lower().endswith('grammar') else name
elif log_file_name.lower().endswith('.log'):
log_file_name = log_file_name[:-4]
full_history, match_history, errors_only = [], [], [] full_history, match_history, errors_only = [], [], []
for record in self.history__: for record in self.history__:
line = "; ".join(prepare_line(record)) line = "; ".join(prepare_line(record))
......
...@@ -264,7 +264,7 @@ def grammar_suite(directory, parser_factory, transformer_factory, ...@@ -264,7 +264,7 @@ def grammar_suite(directory, parser_factory, transformer_factory,
err_N = 0 err_N = 0
if all_errors: if all_errors:
for filename in all_errors: for filename in all_errors:
error_report.append('Errors found by unit test "%s":' % filename) error_report.append('Errors found by unit test "%s":\n' % filename)
err_N += len(all_errors[filename]) err_N += len(all_errors[filename])
for error in all_errors[filename]: for error in all_errors[filename]:
error_report.append('\t' + '\n\t'.join(error.split('\n'))) error_report.append('\t' + '\n\t'.join(error.split('\n')))
......
...@@ -11,15 +11,15 @@ LEMMA facitergula ...@@ -11,15 +11,15 @@ LEMMA facitergula
GRAMMATIK GRAMMATIK
nomen; -ae f. nomen; -ae f.
-us, -i m.: v. ibi -us, -i m.: -> v. ibi
-um, -i n.: v. ibi -um, -i n.: -> v. ibi
SCHREIBWEISE SCHREIBWEISE
script.: script.:
vizreg-: -> ID_0023 vizreg-: -> ID_0023
festregel(a): v. ibi festregel(a): -> v. ibi
fezdregl(a): v. ibi fezdregl(a): -> v. ibi
BEDEUTUNG BEDEUTUNG
...@@ -34,9 +34,9 @@ BELEGE ...@@ -34,9 +34,9 @@ BELEGE
* Catal.: thes. Germ.; 18,7 "-eterculi viginti quatuor". * Catal.: thes. Germ.; 18,7 "-eterculi viginti quatuor".
* Libri: confrat. I; app. A 6 p. 137,30 "pulpitum ... -a cocco imaginata * Libri: confrat. I; app. A 6 p. 137,30 "pulpitum ... -a cocco imaginata
circumdari iussit pontifex." circumdari iussit pontifex."
* {ID:0023} Catal.: thes. Germ.; 76,15 "-rulae II."; 40,5 VI "vizregule."; 129a,5 "-sterculas * {ID:0023} Catal.: thes. Germ.; 76,15 "-rulae II"; 40,5 VI "vizregule"; 129a,5 "-sterculas
II."; 24,8 "-itella X."; 114,8 VIII "fezdregle."; 6,24 "fasciutercule II."; 24,8 "-itella X"; 114,8 VIII "fezdreglę"; 6,24 "fasciutercule VII";
VII."; 92,6 "fascercule tres." 21,20 IIII "festregele." 92,6 "fascerculę tres"; 21,20 IIII "festregelę"
ZUSATZ saepe. ZUSATZ saepe.
......
...@@ -36,7 +36,7 @@ LemmaWort = LAT_WORT ...@@ -36,7 +36,7 @@ LemmaWort = LAT_WORT
LemmaVarianten = [LZ] LemmaVarianten = [LZ]
{ LemmaVariante §TR }+ { LemmaVariante §TR }+
[Zusatz] [Zusatz §ABS]
LemmaVariante = LAT_WORT_TEIL { "-" LAT_WORT_TEIL } LemmaVariante = LAT_WORT_TEIL { "-" LAT_WORT_TEIL }
...@@ -54,7 +54,7 @@ wortart = "nomen" | "n." ...@@ -54,7 +54,7 @@ wortart = "nomen" | "n."
| "praeposition" | "praep." | "praeposition" | "praep."
flexion = deklination | konjugation flexion = deklination | konjugation
deklination = FLEX §"," FLEX deklination = FLEX ["," FLEX]
konjugation = FLEX konjugation = FLEX
FLEX = /-?[a-z]+/~ FLEX = /-?[a-z]+/~
...@@ -62,7 +62,7 @@ genus = "maskulinum" | "m." ...@@ -62,7 +62,7 @@ genus = "maskulinum" | "m."
| "femininum" | "f." | "femininum" | "f."
| "neutrum" | "n." | "neutrum" | "n."
GrammatikVariante = [wortart ABS] flexion [genus] DPP { Beleg }+ GrammatikVariante = [wortart ABS] flexion [genus] DPP { Beleg }+ # Beleg { SEM Beleg }
...@@ -74,66 +74,31 @@ EtymologieBesonderheit = FREITEXT ...@@ -74,66 +74,31 @@ EtymologieBesonderheit = FREITEXT
Etymologie = FREITEXT Etymologie = FREITEXT
#### ARTIKEL-KOPF ############################################################ #### ARTIKEL-KOPF ############################################################
ArtikelKopf = < SchreibweisenPosition | StrukturPosition | GebrauchPosition ArtikelKopf = < SchreibweisenPosition
| MetrikPosition | VerwechselungsPosition > | StrukturPosition
| GebrauchPosition
## Schreibweisen-Position ## | MetrikPosition
| VerwechselungPosition >
# TODO: Ggf. noch zu ergänzen um: Zusatz, Mehrere Tyen innerhalb der Schreibweisen-Position.
SchreibweisenPosition = "SCHREIBWEISE" [LZ] { SWKategorie }+
SWKategorie = SWTyp §DPP [LZ] ( Varianten | { SWKategorie }+ ) [LZ]
SWTyp = scriptfat | scriptform | script | form | gen | abl | FREITEXT
scriptfat = "script." "fat-"
scriptform = "script. " "form"
script = "srcipt."
form = "form"
gen = "gen."
abl = "abl."
#### STRUKTUR-POSITION #######################################################
StrukturPosition = "STRUKTUR" [LZ] §{ STKategorie }+
STKategorie = STTyp §DPP [LZ] ( Varianten | { STKategorie }+ ) [LZ]
STTyp = ZEICHENFOLGE
SchreibweisenPosition = "SCHREIBWEISE" Position
StrukturPosition = "STRUKTUR" Position
GebrauchPosition = "GEBRAUCH" Position
MetrikPosition = "METRIK" Position
VerwechselungPosition = "VERWECHSELBAR" Position
#### GEBRAUCH-POSITION ####################################################### ## ARTIKELKOPF POSITIONEN ##
GebrauchPosition = "GEBRAUCH" [LZ] §{ GBKategorie }+ Position = [LZ] §{ Kategorie }+
GBKategorie = GBTyp §DPP [LZ] ( Varianten | { GBKategorie }+ ) [LZ] Kategorie = Besonderheit §DPP [LZ] ( Varianten | { Kategorie }+ ) [LZ]
GBTyp = ZEICHENFOLGE Besonderheit = FREITEXT
Varianten = Variante { ABS Variante }
Variante = !KATEGORIENZEILE Gegenstand DPP Beleg
#### METRIK-POSITION ######################################################### Gegenstand = ZEICHENFOLGE
MetrikPosition = "METRIK" [LZ] §{ MTKategorie }+
MTKategorie = MTTyp §DPP [LZ] ( Varianten | { MTKategorie }+ ) [LZ]
MTTyp = ZEICHENFOLGE
#### VERWECHSLUNGS-POSITION ##################################################
VerwechselungsPosition = "VERWECHSELBAR" [LZ] §{ VWKategorie }+
VWKategorie = VWTyp §DPP [LZ] ( Varianten | { VWKategorie }+ ) [LZ]
VWTyp = ZEICHENFOLGE
#### ARTIKELKOPF POSITIONEN VARIANTEN ########################################
Varianten = Variante { ABS Variante }
Variante = !KATEGORIENZEILE Gegenstand DPP Beleg
Gegenstand = ZEICHENFOLGE
#### BEDEUTUNGS-POSITION ##################################################### #### BEDEUTUNGS-POSITION #####################################################
##############################################################################
BedeutungsPosition = { "BEDEUTUNG" [LZ] §Bedeutung }+ BedeutungsPosition = { "BEDEUTUNG" [LZ] §Bedeutung }+
...@@ -143,8 +108,7 @@ Interpretamente = LateinischeBedeutung [LZ] §DeutscheBedeutung [LZ] ...@@ -143,8 +108,7 @@ Interpretamente = LateinischeBedeutung [LZ] §DeutscheBedeutung [LZ]
LateinischeBedeutung = LAT /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~ LateinischeBedeutung = LAT /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~
DeutscheBedeutung = DEU /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~ DeutscheBedeutung = DEU /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~
Belege = "BELEGE" [LZ] (EinBeleg | { "*" EinBeleg }) ABS Belege = "BELEGE" { ZWW "*" Beleg }+ ABS
EinBeleg = { !([LZ] "*" | SCHLUESSELWORT) /\s*[^\n]*/~ [ZW] }+ [Zusatz]
#### VERWEIS-POSITION ##################################################### #### VERWEIS-POSITION #####################################################
...@@ -176,16 +140,17 @@ SCHLUESSELWORT = { //~ /\n/ }+ !ROEMISCHE_ZAHL /[A-ZÄÖÜ]{3,}\s+/ ...@@ -176,16 +140,17 @@ SCHLUESSELWORT = { //~ /\n/ }+ !ROEMISCHE_ZAHL /[A-ZÄÖÜ]{3,}\s+/
#### ZUSATZ an verschiedenen Stellen der Struktur ############################ #### ZUSATZ an verschiedenen Stellen der Struktur ############################
Zusatz = "ZUSATZ" §{ zusatz_typ [TR] }+ Zusatz = "ZUSATZ" §{ [TR] zusatz_typ ["."] }+
zusatz_typ = "adde" | "al" | "sim." | "saepe" | "vel-rarius" | "vel" | FREITEXT zusatz_typ = "adde" | "al" | "sim." | "saepe" | "vel-rarius" | "vel" | FREITEXT
#### BELEGE ################################################################## #### BELEGE ##################################################################
Beleg = (BelegQuelle BelegText) | BelegText | Verweis Beleg = Verweis | Zitat
BelegQuelle = Autor DPP Werk SEM Stelle [SEM Datierung] [SEM Edition] Zitat = BelegQuelle { SEM Stelle BelegText } [[TR] Zusatz]
BelegText = '"' FREITEXT '"' BelegQuelle = Autor DPP Werk
BelegText = ~/"/ FREITEXT /"/~ ["."]
Verweis = "->" ZielName Verweis = "->" ZielName
VerweisZiel = "{" ZielName "}" VerweisZiel = "{" ZielName "}"
...@@ -203,20 +168,21 @@ Edition = FREITEXT ...@@ -203,20 +168,21 @@ Edition = FREITEXT
NAMENS_ABKÜRZUNG = /[A-ZÄÖÜÁÀÂÓÒÔÚÙÛ]\./~ NAMENS_ABKÜRZUNG = /[A-ZÄÖÜÁÀÂÓÒÔÚÙÛ]\./~
NAME = /[A-ZÄÖÜÁÀÓÒÚÙÂÔÛ][a-zäöüßáàâóòôúùû]+/~ NAME = /[A-ZÄÖÜÁÀÓÒÚÙÂÔÛ][a-zäöüßáàâóòôúùû]+/~
DEU_WORT = /[A-ZÄÖÜ]?[a-zäöüß]+/~ DEU_WORT = DEU_GROSS | DEU_KLEIN | GROSSBUCHSTABE
DEU_GROSS = /[A-ZÄÖÜ][a-zäöüß]+/~ DEU_GROSS = /[A-ZÄÖÜ][a-zäöüßę]+/~
DEU_KLEIN = /[a-zäöüß]+/~ GROSSBUCHSTABE = /[A-ZÄÖÜ](?=[ \t\n])/~
DEU_KLEIN = /[a-zäöüßę]+/~
LAT_WORT = /[a-z]+/~ LAT_WORT = /[a-z]+/~
LAT_WORT_TEIL = /[a-z]+/ LAT_WORT_TEIL = /[a-z]+/
GROSSSCHRIFT = /[A-ZÄÖÜ]+/~ GROSSSCHRIFT = /[A-ZÄÖÜ]+/~
ZAHL = /\d+/~ ZAHL = /\d+/~
ROEMISCHE_ZAHL = /(?=[MDCLXVI])M*(C[MD]|D?C*)(X[CL]|L?X*)(I[XV]|V?I*)/~ ROEMISCHE_ZAHL = /(?=[MDCLXVI])M*(C[MD]|D?C*)(X[CL]|L?X*)(I[XV]|V?I*)/~
SATZZEICHEN = /(?:,(?!,))|(?:;(?!;))|(?::(?!:))|[.()\-]+/~ # div. Satzzeichen, aber keine doppelten ,, ;; oder :: SATZZEICHEN = /(?:,(?!,))|(?:;(?!;))|(?::(?!:))|[.()\[\]\-]+/~ # div. Satzzeichen, aber keine doppelten ,, ;; oder ::
TEXTELEMENT = DEU_WORT | ZAHL | ROEMISCHE_ZAHL TEXTELEMENT = DEU_WORT | ZAHL | ROEMISCHE_ZAHL
FREITEXT = { TEXTELEMENT | /[.()\-\s]+/ | /,(?!,)\s*/ }+ FREITEXT = !ZEILENSPRUNG { TEXTELEMENT | /[.()\[\]\-\s]+/ | /,(?!,)\s*/ }+
ERW_FREITEXT = { TEXTELEMENT | SATZZEICHEN | /\s+/ }+ ERW_FREITEXT = !ZEILENSPRUNG { TEXTELEMENT | SATZZEICHEN | /\s+/ }+
BUCHSTABENFOLGE = /\w+/~ BUCHSTABENFOLGE = /\w+/~
ZEICHENFOLGE = /[\w()-]+/~ ZEICHENFOLGE = /[\w()-]+/~
......
...@@ -88,7 +88,7 @@ class MLWGrammar(Grammar): ...@@ -88,7 +88,7 @@ class MLWGrammar(Grammar):
LemmaVarianten = [LZ] LemmaVarianten = [LZ]
{ LemmaVariante §TR }+ { LemmaVariante §TR }+
[Zusatz] [Zusatz §ABS]
LemmaVariante = LAT_WORT_TEIL { "-" LAT_WORT_TEIL } LemmaVariante = LAT_WORT_TEIL { "-" LAT_WORT_TEIL }
...@@ -106,7 +106,7 @@ class MLWGrammar(Grammar): ...@@ -106,7 +106,7 @@ class MLWGrammar(Grammar):
| "praeposition" | "praep." | "praeposition" | "praep."
flexion = deklination | konjugation flexion = deklination | konjugation
deklination = FLEX §"," FLEX deklination = FLEX ["," FLEX]
konjugation = FLEX konjugation = FLEX
FLEX = /-?[a-z]+/~ FLEX = /-?[a-z]+/~
...@@ -114,7 +114,7 @@ class MLWGrammar(Grammar): ...@@ -114,7 +114,7 @@ class MLWGrammar(Grammar):
| "femininum" | "f." | "femininum" | "f."
| "neutrum" | "n." | "neutrum" | "n."
GrammatikVariante = [wortart ABS] flexion [genus] DPP { Beleg }+ GrammatikVariante = [wortart ABS] flexion [genus] DPP { Beleg }+ # Beleg { SEM Beleg }
...@@ -126,66 +126,31 @@ class MLWGrammar(Grammar): ...@@ -126,66 +126,31 @@ class MLWGrammar(Grammar):
Etymologie = FREITEXT Etymologie = FREITEXT
#### ARTIKEL-KOPF ############################################################ #### ARTIKEL-KOPF ############################################################
ArtikelKopf = < SchreibweisenPosition | StrukturPosition | GebrauchPosition ArtikelKopf = < SchreibweisenPosition
| MetrikPosition | VerwechselungsPosition > | StrukturPosition
| GebrauchPosition
## Schreibweisen-Position ## | MetrikPosition
| VerwechselungPosition >
# TODO: Ggf. noch zu ergänzen um: Zusatz, Mehrere Tyen innerhalb der Schreibweisen-Position.
SchreibweisenPosition = "SCHREIBWEISE" [LZ] { SWKategorie }+
SWKategorie = SWTyp §DPP [LZ] ( Varianten | { SWKategorie }+ ) [LZ]
SWTyp = scriptfat | scriptform | script | form | gen | abl | FREITEXT
scriptfat = "script." "fat-"
scriptform = "script. " "form"
script = "srcipt."
form = "form"
gen = "gen."
abl = "abl."
#### STRUKTUR-POSITION #######################################################
StrukturPosition = "STRUKTUR" [LZ] §{ STKategorie }+
STKategorie = STTyp §DPP [LZ] ( Varianten | { STKategorie }+ ) [LZ]
STTyp = ZEICHENFOLGE
SchreibweisenPosition = "SCHREIBWEISE" Position
StrukturPosition = "STRUKTUR" Position
GebrauchPosition = "GEBRAUCH" Position
MetrikPosition = "METRIK" Position
VerwechselungPosition = "VERWECHSELBAR" Position
#### GEBRAUCH-POSITION ####################################################### ## ARTIKELKOPF POSITIONEN ##
GebrauchPosition = "GEBRAUCH" [LZ] §{ GBKategorie }+ Position = [LZ] §{ Kategorie }+
GBKategorie = GBTyp §DPP [LZ] ( Varianten | { GBKategorie }+ ) [LZ] Kategorie = Besonderheit §DPP [LZ] ( Varianten | { Kategorie }+ ) [LZ]
GBTyp = ZEICHENFOLGE Besonderheit = FREITEXT
Varianten = Variante { ABS Variante }
Variante = !KATEGORIENZEILE Gegenstand DPP Beleg
#### METRIK-POSITION ######################################################### Gegenstand = ZEICHENFOLGE
MetrikPosition = "METRIK" [LZ] §{ MTKategorie }+
MTKategorie = MTTyp §DPP [LZ] ( Varianten | { MTKategorie }+ ) [LZ]
MTTyp = ZEICHENFOLGE
#### VERWECHSLUNGS-POSITION ##################################################
VerwechselungsPosition = "VERWECHSELBAR" [LZ] §{ VWKategorie }+
VWKategorie = VWTyp §DPP [LZ] ( Varianten | { VWKategorie }+ ) [LZ]
VWTyp = ZEICHENFOLGE
#### ARTIKELKOPF POSITIONEN VARIANTEN ########################################
Varianten = Variante { ABS Variante }
Variante = !KATEGORIENZEILE Gegenstand DPP Beleg
Gegenstand = ZEICHENFOLGE
#### BEDEUTUNGS-POSITION ##################################################### #### BEDEUTUNGS-POSITION #####################################################
##############################################################################
BedeutungsPosition = { "BEDEUTUNG" [LZ] §Bedeutung }+ BedeutungsPosition = { "BEDEUTUNG" [LZ] §Bedeutung }+
...@@ -195,8 +160,7 @@ class MLWGrammar(Grammar): ...@@ -195,8 +160,7 @@ class MLWGrammar(Grammar):
LateinischeBedeutung = LAT /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~ LateinischeBedeutung = LAT /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~
DeutscheBedeutung = DEU /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~ DeutscheBedeutung = DEU /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~
Belege = "BELEGE" [LZ] (EinBeleg | { "*" EinBeleg }) ABS Belege = "BELEGE" { ZWW "*" Beleg }+ ABS
EinBeleg = { !([LZ] "*" | SCHLUESSELWORT) /\s*[^\n]*/~ [ZW] }+ [Zusatz]
#### VERWEIS-POSITION ##################################################### #### VERWEIS-POSITION #####################################################
...@@ -228,16 +192,17 @@ class MLWGrammar(Grammar): ...@@ -228,16 +192,17 @@ class MLWGrammar(Grammar):
#### ZUSATZ an verschiedenen Stellen der Struktur ############################ #### ZUSATZ an verschiedenen Stellen der Struktur ############################
Zusatz = "ZUSATZ" §{ zusatz_typ [TR] }+ Zusatz = "ZUSATZ" §{ [TR] zusatz_typ ["."] }+
zusatz_typ = "adde" | "al" | "sim." | "saepe" | "vel-rarius" | "vel" | FREITEXT zusatz_typ = "adde" | "al" | "sim." | "saepe" | "vel-rarius" | "vel" | FREITEXT
#### BELEGE ################################################################## #### BELEGE ##################################################################
Beleg = (BelegQuelle BelegText) | BelegText | Verweis Beleg = Verweis | Zitat
BelegQuelle = Autor DPP Werk SEM Stelle [SEM Datierung] [SEM Edition] Zitat = BelegQuelle { SEM Stelle BelegText } [[TR] Zusatz]
BelegText = '"' FREITEXT '"' BelegQuelle = Autor DPP Werk
BelegText = ~/"/ FREITEXT /"/~ ["."]
Verweis = "->" ZielName Verweis = "->" ZielName
VerweisZiel = "{" ZielName "}" VerweisZiel = "{" ZielName "}"
...@@ -255,20 +220,21 @@ class MLWGrammar(Grammar): ...@@ -255,20 +220,21 @@ class MLWGrammar(Grammar):
NAMENS_ABKÜRZUNG = /[A-ZÄÖÜÁÀÂÓÒÔÚÙÛ]\./~ NAMENS_ABKÜRZUNG = /[A-ZÄÖÜÁÀÂÓÒÔÚÙÛ]\./~
NAME = /[A-ZÄÖÜÁÀÓÒÚÙÂÔÛ][a-zäöüßáàâóòôúùû]+/~ NAME = /[A-ZÄÖÜÁÀÓÒÚÙÂÔÛ][a-zäöüßáàâóòôúùû]+/~
DEU_WORT = /[A-ZÄÖÜ]?[a-zäöüß]+/~ DEU_WORT = DEU_GROSS | DEU_KLEIN | GROSSBUCHSTABE
DEU_GROSS = /[A-ZÄÖÜ][a-zäöüß]+/~ DEU_GROSS = /[A-ZÄÖÜ][a-zäöüßę]+/~
DEU_KLEIN = /[a-zäöüß]+/~ GROSSBUCHSTABE = /[A-ZÄÖÜ](?=[ \t\n])/~
DEU_KLEIN = /[a-zäöüßę]+/~
LAT_WORT = /[a-z]+/~ LAT_WORT = /[a-z]+/~
LAT_WORT_TEIL = /[a-z]+/ LAT_WORT_TEIL = /[a-z]+/
GROSSSCHRIFT = /[A-ZÄÖÜ]+/~ GROSSSCHRIFT = /[A-ZÄÖÜ]+/~
ZAHL = /\d+/~ ZAHL = /\d+/~
ROEMISCHE_ZAHL = /(?=[MDCLXVI])M*(C[MD]|D?C*)(X[CL]|L?X*)(I[XV]|V?I*)/~ ROEMISCHE_ZAHL = /(?=[MDCLXVI])M*(C[MD]|D?C*)(X[CL]|L?X*)(I[XV]|V?I*)/~
SATZZEICHEN = /(?:,(?!,))|(?:;(?!;))|(?::(?!:))|[.()\-]+/~ # div. Satzzeichen, aber keine doppelten ,, ;; oder :: SATZZEICHEN = /(?:,(?!,))|(?:;(?!;))|(?::(?!:))|[.()\[\]\-]+/~ # div. Satzzeichen, aber keine doppelten ,, ;; oder ::
TEXTELEMENT = DEU_WORT | ZAHL | ROEMISCHE_ZAHL TEXTELEMENT = DEU_WORT | ZAHL | ROEMISCHE_ZAHL
FREITEXT = { TEXTELEMENT | /[.()\-\s]+/ | /,(?!,)\s*/ }+ FREITEXT = !ZEILENSPRUNG { TEXTELEMENT | /[.()\[\]\-\s]+/ | /,(?!,)\s*/ }+
ERW_FREITEXT = { TEXTELEMENT | SATZZEICHEN | /\s+/ }+ ERW_FREITEXT = !ZEILENSPRUNG { TEXTELEMENT | SATZZEICHEN | /\s+/ }+
BUCHSTABENFOLGE = /\w+/~ BUCHSTABENFOLGE = /\w+/~
ZEICHENFOLGE = /[\w()-]+/~ ZEICHENFOLGE = /[\w()-]+/~
...@@ -297,19 +263,16 @@ class MLWGrammar(Grammar): ...@@ -297,19 +263,16 @@ class MLWGrammar(Grammar):
DUMMY = "EBNF-Grammatik an dieser Stelle noch nicht definiert!" DUMMY = "EBNF-Grammatik an dieser Stelle noch nicht definiert!"
""" """
DEU_WORT = Forward() DEU_WORT = Forward()
GBKategorie = Forward() Kategorie = Forward()
MTKategorie = Forward()
ROEMISCHE_ZAHL = Forward() ROEMISCHE_ZAHL = Forward()
SATZZEICHEN = Forward() SATZZEICHEN = Forward()
STKategorie = Forward()
SWKategorie = Forward()
TEXTELEMENT = Forward() TEXTELEMENT = Forward()
VWKategorie = Forward()
ZAHL = Forward() ZAHL = Forward()
Zusatz = Forward()
flexion = Forward() flexion = Forward()
genus = Forward() genus = Forward()
wortart = Forward() wortart = Forward()
source_hash__ = "1b6cf564c748b80f149503b3650c7ccd" source_hash__ = "3e563592ce262f34a151a9f65f997b6b"
parser_initialization__ = "upon instantiation" parser_initialization__ = "upon instantiation"
COMMENT__ = r'#.*' COMMENT__ = r'#.*'
WHITESPACE__ = r'[\t ]*' WHITESPACE__ = r'[\t ]*'
...@@ -335,18 +298,19 @@ class MLWGrammar(Grammar): ...@@ -335,18 +298,19 @@ class MLWGrammar(Grammar):
TR = Alternative(ABS, LZ) TR = Alternative(ABS, LZ)
ZEICHENFOLGE = RE('[\\w()-]+') ZEICHENFOLGE = RE('[\\w()-]+')
BUCHSTABENFOLGE = RE('\\w+') BUCHSTABENFOLGE = RE('\\w+')
ERW_FREITEXT = OneOrMore(Alternative(TEXTELEMENT, SATZZEICHEN, RegExp('\\s+'))) ERW_FREITEXT = Series(NegativeLookahead(ZEILENSPRUNG), OneOrMore(Alternative(TEXTELEMENT, SATZZEICHEN, RegExp('\\s+'))))
FREITEXT = OneOrMore(Alternative(TEXTELEMENT, RegExp('[.()\\-\\s]+'), RegExp(',(?!,)\\s*'))) FREITEXT = Series(NegativeLookahead(ZEILENSPRUNG), OneOrMore(Alternative(TEXTELEMENT, RegExp('[.()\\[\\]\\-\\s]+'), RegExp(',(?!,)\\s*'))))
TEXTELEMENT.set(Alternative(DEU_WORT, ZAHL, ROEMISCHE_ZAHL)) TEXTELEMENT.set(Alternative(DEU_WORT, ZAHL, ROEMISCHE_ZAHL))
SATZZEICHEN.set(RE('(?:,(?!,))|(?:;(?!;))|(?::(?!:))|[.()\\-]+')) SATZZEICHEN.set(RE('(?:,(?!,))|(?:;(?!;))|(?::(?!:))|[.()\\[\\]\\-]+'))
ROEMISCHE_ZAHL.set(RE('(?=[MDCLXVI])M*(C[MD]|D?C*)(X[CL]|L?X*)(I[XV]|V?I*)')) ROEMISCHE_ZAHL.set(RE('(?=[MDCLXVI])M*(C[MD]|D?C*)(X[CL]|L?X*)(I[XV]|V?I*)'))
ZAHL.set(RE('\\d+')) ZAHL.set(RE('\\d+'))
GROSSSCHRIFT = RE('[A-ZÄÖÜ]+') GROSSSCHRIFT = RE('[A-ZÄÖÜ]+')
LAT_WORT_TEIL = RegExp('[a-z]+') LAT_WORT_TEIL = RegExp('[a-z]+')
LAT_WORT = RE('[a-z]+') LAT_WORT = RE('[a-z]+')
DEU_KLEIN = RE('[a-zäöüß]+') DEU_KLEIN = RE('[a-zäöüßę]+')
DEU_GROSS = RE('[A-ZÄÖÜ][a-zäöüß]+') GROSSBUCHSTABE = RE('[A-ZÄÖÜ](?=[ \\t\\n])')
DEU_WORT.set(RE('[A-ZÄÖÜ]?[a-zäöüß]+')) DEU_GROSS = RE('[A-ZÄÖÜ][a-zäöüßę]+')
DEU_WORT.set(Alternative(DEU_GROSS, DEU_KLEIN, GROSSBUCHSTABE))
NAME = RE('[A-ZÄÖÜÁÀÓÒÚÙÂÔÛ][a-zäöüßáàâóòôúùû]+') NAME = RE('[A-ZÄÖÜÁÀÓÒÚÙÂÔÛ][a-zäöüßáàâóòôúùû]+')
NAMENS_ABKÜRZUNG = RE('[A-ZÄÖÜÁÀÂÓÒÔÚÙÛ]\\.') NAMENS_ABKÜRZUNG = RE('[A-ZÄÖÜÁÀÂÓÒÔÚÙÛ]\\.')
Edition = Synonym(FREITEXT) Edition = Synonym(FREITEXT)
...@@ -357,11 +321,12 @@ class MLWGrammar(Grammar): ...@@ -357,11 +321,12 @@ class MLWGrammar(Grammar):
ZielName = Synonym(BUCHSTABENFOLGE) ZielName = Synonym(BUCHSTABENFOLGE)
VerweisZiel = Series(Token("{"), ZielName, Token("}")) VerweisZiel = Series(Token("{"), ZielName, Token("}"))
Verweis = Series(Token("->"), ZielName) Verweis = Series(Token("->"), ZielName)
BelegText = Series(Token('"'), FREITEXT, Token('"')) BelegText = Series(RE('"', wR='', wL=WSP__), FREITEXT, RE('"'), Option(Token(".")))
BelegQuelle = Series(Autor, DPP, Werk, SEM, Stelle, Option(Series(SEM, Datierung)), Option(Series(SEM, Edition))) BelegQuelle = Series(Autor, DPP, Werk)
Beleg = Alternative(Series(BelegQuelle, BelegText), BelegText, Verweis) Zitat = Series(BelegQuelle, ZeroOrMore(Series(SEM, Stelle, BelegText)), Option(Series(Option(TR), Zusatz)))
Beleg = Alternative(Verweis, Zitat)
zusatz_typ = Alternative(Token("adde"), Token("al"), Token("sim."), Token("saepe"), Token("vel-rarius"), Token("vel"), FREITEXT) zusatz_typ = Alternative(Token("adde"), Token("al"), Token("sim."), Token("saepe"), Token("vel-rarius"), Token("vel"), FREITEXT)
Zusatz = Series(Token("ZUSATZ"), OneOrMore(Series(zusatz_typ, Option(TR))), mandatory=1) Zusatz.set(Series(Token("ZUSATZ"), OneOrMore(Series(Option(TR), zusatz_typ, Option(Token(".")))), mandatory=1))
SCHLUESSELWORT = Series(OneOrMore(Series(RE(''), RegExp('\\n'))), NegativeLookahead(ROEMISCHE_ZAHL), RegExp('[A-ZÄÖÜ]{3,}\\s+')) SCHLUESSELWORT = Series(OneOrMore(Series(RE(''), RegExp('\\n'))), NegativeLookahead(ROEMISCHE_ZAHL), RegExp('[A-ZÄÖÜ]{3,}\\s+'))
GRI = Alternative(Token("GRIECHISCH"), Token("GRIECH"), Token("GRIE"), Token("GRI")) GRI = Alternative(Token("GRIECHISCH"), Token("GRIECH"), Token("GRIE"), Token("GRI"))
DEU = Alternative(Token("DEUTSCH"), Token("DEU")) DEU = Alternative(Token("DEUTSCH"), Token("DEU"))
...@@ -370,8 +335,7 @@ class MLWGrammar(Grammar): ...@@ -370,8 +335,7 @@ class MLWGrammar(Grammar):
ArtikelVerfasser = Series(Alternative(Token("AUTORIN"), Token("AUTOR")), Name) ArtikelVerfasser = Series(Alternative(Token("AUTORIN"), Token("AUTOR")), Name)
UnterArtikel = Token("UNTER-ARTIKEL") UnterArtikel = Token("UNTER-ARTIKEL")
VerweisPosition = Token("VERWEISE") VerweisPosition = Token("VERWEISE")
EinBeleg = Series(OneOrMore(Series(NegativeLookahead(Alternative(Series(Option(LZ), Token("*")), SCHLUESSELWORT)), RE('\\s*[^\\n]*'), Option(ZW))), Option(Zusatz)) Belege = Series(Token("BELEGE"), OneOrMore(Series(ZWW, Token("*"), Beleg)), ABS)