Commit a5dfe5b5 authored by di68kap's avatar di68kap
Browse files

- bugfix: syntaxtree.Node.__len__()

- MLW erweitert
parent 10c52b21
......@@ -261,7 +261,7 @@ class Node(collections.abc.Sized):
def __len__(self):
if self._len < 0:
self._len = sum(child._len for child in self.children) \
self._len = sum(len(child) for child in self.children) \
if self.children else len(self._result)
return self._len
......
......@@ -269,9 +269,10 @@ def grammar_suite(directory, parser_factory, transformer_factory,
for error in all_errors[filename]:
error_report.append('\t' + '\n\t'.join(error.split('\n')))
if error_report:
if verbose:
print("\nFAILURE! %i error%s found!\n" % (err_N, 's' if err_N > 1 else ''))
return ('Test suite "%s" revealed some errors:\n\n' % directory) + '\n'.join(error_report)
# if verbose:
# print("\nFAILURE! %i error%s found!\n" % (err_N, 's' if err_N > 1 else ''))
return ('Test suite "%s" revealed %s error%s:\n\n'
% (directory, err_N, 's' if err_N > 1 else '') + '\n'.join(error_report))
if verbose:
print("\nSUCCESS! All tests passed :-)\n")
return ''
......
......@@ -11,15 +11,15 @@ LEMMA facitergula
GRAMMATIK
nomen; -ae f.
-us, -i m.: -> v. ibi
-um, -i n.: -> v. ibi
-us, -i m.: -> { ibi 1}
-um, -i n.: -> { ibi 2}
SCHREIBWEISE
script.:
vizreg-: -> Verweis_1
festregel(a): -> v. ibi
fezdregl(a): -> v. ibi
vizreg-: -> {ibi 3}
festregel(a): -> {ibi 4}
fezdregl(a): -> {ibi 5}
BEDEUTUNG
......@@ -29,14 +29,14 @@ DEUTSCH Gesichts-, Schweißtuch [usu liturg.; de re v. p. 32, 63]
BELEGE
* Catal.: thes. Germ.; 28,11 (post 851) "-um III."
* Form.: Sangall.; 39 p. 421,16 "munuscula ... direximus, hoc est palliolum ... ,
* Form.: Sangall.; {ibi 2} 39 p. 421,16 "munuscula ... direximus, hoc est palliolum ... ,
-as duas."
* Catal.: thes. Germ.; 18,7 "-eterculi viginti quatuor".
* Libri: confrat. I; app. A 6 p. 137,30 "pulpitum ... -a cocco imaginata
* Libri: confrat. I; {ibi 1} app. A 6 p. 137,30 "pulpitum ... -a cocco imaginata
circumdari iussit pontifex."
* {ID 0023} Catal.: thes. Germ.; 76,15 "-rulae II"; 40,5 VI "vizregule"; 129a,5 "-sterculas
II."; 24,8 "-itella X"; 114,8 VIII "fezdreglę"; 6,24 "fasciutercule VII";
92,6 "fascerculę tres"; 21,20 IIII "festregelę"
* Catal.: thes. Germ. -> {ID extern}; {ibi 3} 76,15 "-rulae II"; 40,5 VI "vizregule"; 129a,5 "-sterculas
II."; {ibi 5} 24,8 "-itella X"; 114,8 VIII "fezdreglę"; 6,24 "fasciutercule VII";
{ibi 4} 92,6 "fascerculę tres"; 21,20 IIII "festregelę"
ZUSATZ saepe.
......
LEMMA imperi|um
LEMMA imperium
inperium
GRAMMATIK
nomen; -i n.
......@@ -7,22 +8,22 @@ GRAMMATIK
SCHREIBWEISE
script.:
hym-: v. ibi.
em-: Chron. Fred. 2,35sqq. capit. p. 43. 2,36 p. 60,10.
ym-: Chart. Sangall. A 194.
impir-: v. ibi.
hym-: -> {ibi 1}
em-: Chron.: Fred. 2,35sqq. capit. p. 43. 2,36 p. 60,10.
ym-: Chart.: Sangall. A 194.
impir-: -> {v. ibi.}
STRUKTUR
form. sing.:
gen.:
-ri: v. ibi. adde Annal. Plac. a. 1266 p. 516,21.
-iae: Chron. Fred. 2,33. p. 56,22. 2,35.
-ri: {v. ibi.} adde Annal.: Plac. a. 1266 p. 516,21.
-iae: Chron.: Fred. 2,33. p. 56,22. 2,35.
abl.:
-um: Chron. Fred. 2,15. 2,35sqq. capit. p. 43.
-um: Chron.: Fred. 2,15. 2,35sqq. capit. p. 43.
VERWECHSELBAR
confunditur c.:
imperitus: v. ibi.
imperitus: -> { v. ibi. }
BEDEUTUNG
......
......@@ -22,11 +22,10 @@ Artikel = [LZ]
[LZ] DATEI_ENDE
#### LEMMA-POSITION ##########################################################
LemmaPosition = "LEMMA" [LZ] §Lemma TR [LemmaVarianten]
GrammatikPosition [Zusatz] [ABS]
LemmaPosition = [ABS] "LEMMA" [LZ] §Lemma TR [LemmaVarianten]
GrammatikPosition [Zusatz]
Lemma = [< klassisch | gesichert >] LemmaWort
klassisch = "*"
......@@ -34,16 +33,15 @@ Lemma = [< klassisch | gesichert >] LemmaWort
LemmaWort = LAT_WORT
LemmaVarianten = [LZ]
{ LemmaVariante §TR }+
[Zusatz §ABS]
LemmaVarianten = LemmaVariante { [TR] LemmaVariante }
[[TR] Zusatz]
LemmaVariante = LAT_WORT
## GRAMMATIK-POSITION ##
GrammatikPosition = "GRAMMATIK" [LZ] §Grammatik ABS { GrammatikVariante §ABS }
GrammatikPosition = ZWW "GRAMMATIK" [LZ] §Grammatik { ABS GrammatikVariante }
Grammatik = wortart §ABS flexion [genus]
......@@ -68,10 +66,10 @@ GrammatikVariante = [wortart ABS] flexion [genus] DPP Beleg { FORTSETZUNG Beleg
#### ETYMOLOGIE-POSITION #####################################################
EtymologiePosition = "ETYMOLOGIE" [LZ] { EtymologieVariante }+
EtymologiePosition = ZWW "ETYMOLOGIE" [LZ] { EtymologieVariante }+
EtymologieVariante = LAT | GRI [EtymologieBesonderheit] ["ETYM" Etymologie] DPP Beleg
EtymologieBesonderheit = FREITEXT
Etymologie = FREITEXT
EtymologieBesonderheit = EINZEILER
Etymologie = EINZEILER
#### ARTIKEL-KOPF ############################################################
......@@ -82,29 +80,30 @@ ArtikelKopf = < SchreibweisenPosition
| MetrikPosition
| VerwechselungPosition >
SchreibweisenPosition = "SCHREIBWEISE" Position
StrukturPosition = "STRUKTUR" Position
GebrauchPosition = "GEBRAUCH" Position
MetrikPosition = "METRIK" Position
VerwechselungPosition = "VERWECHSELBAR" Position
SchreibweisenPosition = ZWW "SCHREIBWEISE" Position
StrukturPosition = ZWW "STRUKTUR" Position
GebrauchPosition = ZWW "GEBRAUCH" Position
MetrikPosition = ZWW "METRIK" Position
VerwechselungPosition = ZWW "VERWECHSELBAR" Position
## ARTIKELKOPF POSITIONEN ##
Position = [LZ] §{ Kategorie }+
Kategorie = Besonderheit §DPP [LZ] ( Varianten | { Kategorie }+ ) ZWW
Besonderheit = FREITEXT
Varianten = Variante { ABS Variante }
Variante = !KATEGORIENZEILE Gegenstand DPP Beleg
Gegenstand = ZEICHENFOLGE
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 = { "BEDEUTUNG" [LZ] §Bedeutung }+
BedeutungsPosition = { ZWW "BEDEUTUNG" [LZ] §Bedeutung }+
Bedeutung = (Interpretamente | Bedeutungskategorie) [Belege]
Bedeutung = (Interpretamente | Bedeutungskategorie) [BelegPosition]
Bedeutungskategorie = /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~ [LZ]
Interpretamente = LateinischeBedeutung [LZ] §DeutscheBedeutung [LZ]
Interpretamente = LateinischeBedeutung [LZ] §DeutscheBedeutung
LateinischeBedeutung = LAT [LZ] LateinischerAusdruck { <","|ZW> LateinischerAusdruck }
DeutscheBedeutung = DEU [LZ] DeutscherAusdruck { <","|ZW> DeutscherAusdruck }
......@@ -113,22 +112,22 @@ DeutscherAusdruck = DEU_WORT { //~ DEU_WORT } [/\s*/ BedeutungsQualifikation]
BedeutungsQualifikation = "[" EINZEILER { <SEM|ZW> EINZEILER } §"]"
Belege = "BELEGE" { ZWW "*" Beleg }+ ABS
BelegPosition = ZWW "BELEGE" ZWW Belege
#### VERWEIS-POSITION #####################################################
VerweisPosition = "VERWEISE"
VerweisPosition = ZWW "VERWEISE"
#### UNTER-ARTIKEL ########################################################
UnterArtikel = "UNTER-ARTIKEL"
UnterArtikel = ZWW "UNTER-ARTIKEL"
#### AUTOR/AUTORIN ###########################################################
ArtikelVerfasser = ("AUTORIN" | "AUTOR") Name
ArtikelVerfasser = ZWW ("AUTORIN" | "AUTOR") Name
Name = { NAME | NAMENS_ABKÜRZUNG }+
......@@ -145,27 +144,29 @@ SCHLUESSELWORT = { //~ /\n/ }+ !ROEMISCHE_ZAHL /[A-ZÄÖÜ]{3,}\s+/
#### ZUSATZ an verschiedenen Stellen der Struktur ############################
Zusatz = "ZUSATZ" §{ [TR] zusatz_typ ["."] }+
zusatz_typ = "adde" | "al" | "sim." | "saepe" | "vel-rarius" | "vel" | FREITEXT
Zusatz = "ZUSATZ" §{ [TR] zusatz_typ }+
zusatz_typ = "adde" | "al" | "sim." | "saepe" | "vel-rarius" | "vel" | EINZEILER
#### BELEGE ##################################################################
Beleg = Verweis | Zitat
Zitat = BelegQuelle { SEM Stelle BelegText } [[TR] Zusatz]
Belege = ["*"] Beleg { [LZ] "*" Beleg }
Beleg = (Verweis [Zitat]) | Zitat
Zitat = Quellenangabe { SEM [ZW] [Anker] <Stelle | Verweis> [[ZW] BelegText] } [[TR] Zusatz]
Quellenangabe = [Anker] < BelegQuelle | Verweis >
BelegQuelle = Autor DPP Werk
BelegText = ~/"/ FREITEXT §/"/~ ["."]
BelegText = /"/ MEHRZEILER §/"/~ ["."]
Verweis = "->" §ZielName
VerweisZiel = "{" ZielName "}"
ZielName = EINZEILER
Verweis = "->" §Anker
Anker = "{" ZielID §"}"
ZielID = FREITEXT
Autor = FREITEXT
Werk = FREITEXT
Stelle = FREITEXT
Datierung = FREITEXT
Edition = FREITEXT
Autor = EINZEILER
Werk = EINZEILER
Stelle = EINZEILER
Datierung = EINZEILER
Edition = EINZEILER
#### GENERISCHE UND ATOMARE AUSDRÜCKE ########################################
......@@ -174,25 +175,27 @@ NAMENS_ABKÜRZUNG = /[A-ZÄÖÜÁÀÂÓÒÔÚÙÛ]\./~
NAME = /[A-ZÄÖÜÁÀÓÒÚÙÂÔÛ][a-zäöüßáàâóòôúùû]+/~
DEU_WORT = DEU_GROSS | DEU_KLEIN | GROSSBUCHSTABE
DEU_GROSS = /[A-ZÄÖÜ][a-zäöüßę\-]+/
GROSSBUCHSTABE = /[A-ZÄÖÜ](?=[ \t\n])/
DEU_KLEIN = /[a-zäöüßę\-]+/
LAT_WORT = /[a-z|\-]+/
GROSSSCHRIFT = /[A-ZÄÖÜ]+/
ZAHL = /\d+/~
ROEMISCHE_ZAHL = /(?=[MDCLXVI])M*(C[MD]|D?C*)(X[CL]|L?X*)(I[XV]|V?I*)/~
DEU_GROSS = /[A-ZÄÖÜ][a-zäöüßę_\-]+/~
GROSSBUCHSTABE = /[A-ZÄÖÜ](?=[ \t\n])/~
KLEINBUCHSTABE = /[a-zäöü](?=[ \t\n])/~
DEU_KLEIN = /(?!-)[a-zäöüßę_\-]+/~
LAT_WORT = /(?!-)[a-z|\-_]+/~
GROSSSCHRIFT = /(?!-)[A-ZÄÖÜ_\-]+/~
ZAHL = /[\d_]+/~
ROEMISCHE_ZAHL = /(?=[MDCLXVI])M*(C[MD]|D?C*)(X[CL]|L?X*)(I[XV]|V?I*)(?=[^\w])/~
SATZZEICHEN = /(?:,(?!,))|(?:;(?!;))|(?::(?!:))|[.()\[\]\-]+/~ # div. Satzzeichen, aber keine doppelten ,, ;; oder ::
SATZZEICHEN = /(?!->)(?:(?:,(?!,))|(?:;(?!;))|(?::(?!:))|[.()\[\]\-]+)/~ # div. Satzzeichen, aber keine doppelten ,, ;; oder ::
BUCHSTABENFOLGE = /\w+/~
ZEICHENFOLGE = /[\w()-]+/~
EINZEILER = /[\w()-. \t]+/~
TEXTELEMENT = (DEU_WORT //~) | ZAHL | ROEMISCHE_ZAHL
FREITEXT = { TEXTELEMENT | /[.()\[\]\-\s]+/ | /,(?!,)\s*/ }+
ERW_FREITEXT = { TEXTELEMENT | SATZZEICHEN | /\s+/ }+
# EINZEILER = /[\w()-. \t]+/~
TEXTELEMENT = DEU_WORT | ZAHL | ROEMISCHE_ZAHL
EINZEILER = { TEXTELEMENT | /(?!->)[.()\-]+/~ | /,(?!,)/~ }+
FREITEXT = { TEXTELEMENT | SATZZEICHEN | GROSSSCHRIFT }+
MEHRZEILER = { FREITEXT | /\s+(?=[\w,;:.\(\)\-])/ }+
TR = ABS | LZ # (beliebiger) Trenner
ABS = /\s*;;?\s*/ | { ZWW }+ # Abschluss (durch Semikolon oder Zeilenwechsel)
ABS = /\s*;;?\s*/ | ZWW # Abschluss (durch Semikolon oder Zeilenwechsel)
# ZW = /\n/~ # Zeilenwechsel
LZ = /\s+/ # Leerzeichen oder -zeilen
DPP = /::?/~ # Doppelpunkt als Trenner
......
......@@ -74,11 +74,10 @@ class MLWGrammar(Grammar):
[LZ] DATEI_ENDE
#### LEMMA-POSITION ##########################################################
LemmaPosition = "LEMMA" [LZ] §Lemma TR [LemmaVarianten]
GrammatikPosition [Zusatz] [ABS]
LemmaPosition = [ABS] "LEMMA" [LZ] §Lemma TR [LemmaVarianten]
GrammatikPosition [Zusatz]
Lemma = [< klassisch | gesichert >] LemmaWort
klassisch = "*"
......@@ -86,16 +85,15 @@ class MLWGrammar(Grammar):
LemmaWort = LAT_WORT
LemmaVarianten = [LZ]
{ LemmaVariante §TR }+
[Zusatz §ABS]
LemmaVarianten = LemmaVariante { [TR] LemmaVariante }
[[TR] Zusatz]
LemmaVariante = LAT_WORT
## GRAMMATIK-POSITION ##
GrammatikPosition = "GRAMMATIK" [LZ] §Grammatik ABS { GrammatikVariante §ABS }
GrammatikPosition = ZWW "GRAMMATIK" [LZ] §Grammatik { ABS GrammatikVariante }
Grammatik = wortart §ABS flexion [genus]
......@@ -120,10 +118,10 @@ class MLWGrammar(Grammar):
#### ETYMOLOGIE-POSITION #####################################################
EtymologiePosition = "ETYMOLOGIE" [LZ] { EtymologieVariante }+
EtymologiePosition = ZWW "ETYMOLOGIE" [LZ] { EtymologieVariante }+
EtymologieVariante = LAT | GRI [EtymologieBesonderheit] ["ETYM" Etymologie] DPP Beleg
EtymologieBesonderheit = FREITEXT
Etymologie = FREITEXT
EtymologieBesonderheit = EINZEILER
Etymologie = EINZEILER
#### ARTIKEL-KOPF ############################################################
......@@ -134,29 +132,30 @@ class MLWGrammar(Grammar):
| MetrikPosition
| VerwechselungPosition >
SchreibweisenPosition = "SCHREIBWEISE" Position
StrukturPosition = "STRUKTUR" Position
GebrauchPosition = "GEBRAUCH" Position
MetrikPosition = "METRIK" Position
VerwechselungPosition = "VERWECHSELBAR" Position
SchreibweisenPosition = ZWW "SCHREIBWEISE" Position
StrukturPosition = ZWW "STRUKTUR" Position
GebrauchPosition = ZWW "GEBRAUCH" Position
MetrikPosition = ZWW "METRIK" Position
VerwechselungPosition = ZWW "VERWECHSELBAR" Position
## ARTIKELKOPF POSITIONEN ##
Position = [LZ] §{ Kategorie }+
Kategorie = Besonderheit §DPP [LZ] ( Varianten | { Kategorie }+ ) ZWW
Besonderheit = FREITEXT
Varianten = Variante { ABS Variante }
Variante = !KATEGORIENZEILE Gegenstand DPP Beleg
Gegenstand = ZEICHENFOLGE
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 = { "BEDEUTUNG" [LZ] §Bedeutung }+
BedeutungsPosition = { ZWW "BEDEUTUNG" [LZ] §Bedeutung }+
Bedeutung = (Interpretamente | Bedeutungskategorie) [Belege]
Bedeutung = (Interpretamente | Bedeutungskategorie) [BelegPosition]
Bedeutungskategorie = /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~ [LZ]
Interpretamente = LateinischeBedeutung [LZ] §DeutscheBedeutung [LZ]
Interpretamente = LateinischeBedeutung [LZ] §DeutscheBedeutung
LateinischeBedeutung = LAT [LZ] LateinischerAusdruck { <","|ZW> LateinischerAusdruck }
DeutscheBedeutung = DEU [LZ] DeutscherAusdruck { <","|ZW> DeutscherAusdruck }
......@@ -165,22 +164,22 @@ class MLWGrammar(Grammar):
BedeutungsQualifikation = "[" EINZEILER { <SEM|ZW> EINZEILER } §"]"
Belege = "BELEGE" { ZWW "*" Beleg }+ ABS
BelegPosition = ZWW "BELEGE" ZWW Belege
#### VERWEIS-POSITION #####################################################
VerweisPosition = "VERWEISE"
VerweisPosition = ZWW "VERWEISE"
#### UNTER-ARTIKEL ########################################################
UnterArtikel = "UNTER-ARTIKEL"
UnterArtikel = ZWW "UNTER-ARTIKEL"
#### AUTOR/AUTORIN ###########################################################
ArtikelVerfasser = ("AUTORIN" | "AUTOR") Name
ArtikelVerfasser = ZWW ("AUTORIN" | "AUTOR") Name
Name = { NAME | NAMENS_ABKÜRZUNG }+
......@@ -197,27 +196,29 @@ class MLWGrammar(Grammar):
#### ZUSATZ an verschiedenen Stellen der Struktur ############################
Zusatz = "ZUSATZ" §{ [TR] zusatz_typ ["."] }+
zusatz_typ = "adde" | "al" | "sim." | "saepe" | "vel-rarius" | "vel" | FREITEXT
Zusatz = "ZUSATZ" §{ [TR] zusatz_typ }+
zusatz_typ = "adde" | "al" | "sim." | "saepe" | "vel-rarius" | "vel" | EINZEILER
#### BELEGE ##################################################################
Beleg = Verweis | Zitat
Zitat = BelegQuelle { SEM Stelle BelegText } [[TR] Zusatz]
Belege = ["*"] Beleg { [LZ] "*" Beleg }
Beleg = (Verweis [Zitat]) | Zitat
Zitat = Quellenangabe { SEM [ZW] [Anker] <Stelle | Verweis> [[ZW] BelegText] } [[TR] Zusatz]
Quellenangabe = [Anker] < BelegQuelle | Verweis >
BelegQuelle = Autor DPP Werk
BelegText = ~/"/ FREITEXT §/"/~ ["."]
BelegText = /"/ MEHRZEILER §/"/~ ["."]
Verweis = "->" §ZielName
VerweisZiel = "{" ZielName "}"
ZielName = EINZEILER
Verweis = "->" §Anker
Anker = "{" ZielID §"}"
ZielID = FREITEXT
Autor = FREITEXT
Werk = FREITEXT
Stelle = FREITEXT
Datierung = FREITEXT
Edition = FREITEXT
Autor = EINZEILER
Werk = EINZEILER
Stelle = EINZEILER
Datierung = EINZEILER
Edition = EINZEILER
#### GENERISCHE UND ATOMARE AUSDRÜCKE ########################################
......@@ -226,25 +227,27 @@ class MLWGrammar(Grammar):
NAME = /[A-ZÄÖÜÁÀÓÒÚÙÂÔÛ][a-zäöüßáàâóòôúùû]+/~
DEU_WORT = DEU_GROSS | DEU_KLEIN | GROSSBUCHSTABE
DEU_GROSS = /[A-ZÄÖÜ][a-zäöüßę\-]+/
GROSSBUCHSTABE = /[A-ZÄÖÜ](?=[ \t\n])/
DEU_KLEIN = /[a-zäöüßę\-]+/
LAT_WORT = /[a-z|\-]+/
GROSSSCHRIFT = /[A-ZÄÖÜ]+/
ZAHL = /\d+/~
ROEMISCHE_ZAHL = /(?=[MDCLXVI])M*(C[MD]|D?C*)(X[CL]|L?X*)(I[XV]|V?I*)/~
DEU_GROSS = /[A-ZÄÖÜ][a-zäöüßę_\-]+/~
GROSSBUCHSTABE = /[A-ZÄÖÜ](?=[ \t\n])/~
KLEINBUCHSTABE = /[a-zäöü](?=[ \t\n])/~
DEU_KLEIN = /(?!-)[a-zäöüßę_\-]+/~
LAT_WORT = /(?!-)[a-z|\-_]+/~
GROSSSCHRIFT = /(?!-)[A-ZÄÖÜ_\-]+/~
ZAHL = /[\d_]+/~
ROEMISCHE_ZAHL = /(?=[MDCLXVI])M*(C[MD]|D?C*)(X[CL]|L?X*)(I[XV]|V?I*)(?=[^\w])/~
SATZZEICHEN = /(?:,(?!,))|(?:;(?!;))|(?::(?!:))|[.()\[\]\-]+/~ # div. Satzzeichen, aber keine doppelten ,, ;; oder ::
SATZZEICHEN = /(?!->)(?:(?:,(?!,))|(?:;(?!;))|(?::(?!:))|[.()\[\]\-]+)/~ # div. Satzzeichen, aber keine doppelten ,, ;; oder ::
BUCHSTABENFOLGE = /\w+/~
ZEICHENFOLGE = /[\w()-]+/~
EINZEILER = /[\w()-. \t]+/~
TEXTELEMENT = (DEU_WORT //~) | ZAHL | ROEMISCHE_ZAHL
FREITEXT = { TEXTELEMENT | /[.()\[\]\-\s]+/ | /,(?!,)\s*/ }+
ERW_FREITEXT = { TEXTELEMENT | SATZZEICHEN | /\s+/ }+
# EINZEILER = /[\w()-. \t]+/~
TEXTELEMENT = DEU_WORT | ZAHL | ROEMISCHE_ZAHL
EINZEILER = { TEXTELEMENT | /(?!->)[.()\-]+/~ | /,(?!,)/~ }+
FREITEXT = { TEXTELEMENT | SATZZEICHEN | GROSSSCHRIFT }+
MEHRZEILER = { FREITEXT | /\s+(?=[\w,;:.\(\)\-])/ }+
TR = ABS | LZ # (beliebiger) Trenner
ABS = /\s*;;?\s*/ | { ZWW }+ # Abschluss (durch Semikolon oder Zeilenwechsel)
ABS = /\s*;;?\s*/ | ZWW # Abschluss (durch Semikolon oder Zeilenwechsel)
# ZW = /\n/~ # Zeilenwechsel
LZ = /\s+/ # Leerzeichen oder -zeilen
DPP = /::?/~ # Doppelpunkt als Trenner
......@@ -268,7 +271,9 @@ class MLWGrammar(Grammar):
DUMMY = "EBNF-Grammatik an dieser Stelle noch nicht definiert!"
"""
DEU_WORT = Forward()
Kategorie = Forward()
FREITEXT = Forward()
GROSSSCHRIFT = Forward()
Kategorien = Forward()
ROEMISCHE_ZAHL = Forward()
SATZZEICHEN = Forward()
TEXTELEMENT = Forward()
......@@ -278,7 +283,7 @@ class MLWGrammar(Grammar):
flexion = Forward()
genus = Forward()
wortart = Forward()
source_hash__ = "1d6f8c60413469e9350a45b956fcd9fd"
source_hash__ = "7ff4250e122c3a05f3c28e3724c7522d"
parser_initialization__ = "upon instantiation"
COMMENT__ = r'#.*'
WHITESPACE__ = r'[\t ]*'
......@@ -301,73 +306,77 @@ class MLWGrammar(Grammar):
SEM = RE(';;?')
DPP = RE('::?')
LZ = RegExp('\\s+')
ABS = Alternative(RegExp('\\s*;;?\\s*'), OneOrMore(ZWW))
ABS = Alternative(RegExp('\\s*;;?\\s*'), ZWW)
TR = Alternative(ABS, LZ)
ERW_FREITEXT = OneOrMore(Alternative(TEXTELEMENT, SATZZEICHEN, RegExp('\\s+')))
FREITEXT = OneOrMore(Alternative(TEXTELEMENT, RegExp('[.()\\[\\]\\-\\s]+'), RegExp(',(?!,)\\s*')))
TEXTELEMENT.set(Alternative(Series(DEU_WORT, RE('')), ZAHL, ROEMISCHE_ZAHL))
EINZEILER = RE('[\\w()-. \\t]+')
MEHRZEILER = OneOrMore(Alternative(FREITEXT, RegExp('\\s+(?=[\\w,;:.\\(\\)\\-])')))
FREITEXT.set(OneOrMore(Alternative(TEXTELEMENT, SATZZEICHEN, GROSSSCHRIFT)))
EINZEILER = OneOrMore(Alternative(TEXTELEMENT, RE('(?!->)[.()\\-]+'), RE(',(?!,)')))
TEXTELEMENT.set(Alternative(DEU_WORT, ZAHL, ROEMISCHE_ZAHL))
ZEICHENFOLGE = RE('[\\w()-]+')
BUCHSTABENFOLGE = RE('\\w+')
SATZZEICHEN.set(RE('(?:,(?!,))|(?:;(?!;))|(?::(?!:))|[.()\\[\\]\\-]+'))
ROEMISCHE_ZAHL.set(RE('(?=[MDCLXVI])M*(C[MD]|D?C*)(X[CL]|L?X*)(I[XV]|V?I*)'))
ZAHL.set(RE('\\d+'))
GROSSSCHRIFT = RegExp('[A-ZÄÖÜ]+')
LAT_WORT = RegExp('[a-z|\\-]+')
DEU_KLEIN = RegExp('[a-zäöüßę\\-]+')
GROSSBUCHSTABE = RegExp('[A-ZÄÖÜ](?=[ \\t\\n])')
DEU_GROSS = RegExp('[A-ZÄÖÜ][a-zäöüßę\\-]+')
SATZZEICHEN.set(RE('(?!->)(?:(?:,(?!,))|(?:;(?!;))|(?::(?!:))|[.()\\[\\]\\-]+)'))
ROEMISCHE_ZAHL.set(RE('(?=[MDCLXVI])M*(C[MD]|D?C*)(X[CL]|L?X*)(I[XV]|V?I*)(?=[^\\w])'))
ZAHL.set(RE('[\\d_]+'))
GROSSSCHRIFT.set(RE('(?!-)[A-ZÄÖÜ_\\-]+'))
LAT_WORT = RE('(?!-)[a-z|\\-_]+')
DEU_KLEIN = RE('(?!-)[a-zäöüßę_\\-]+')
KLEINBUCHSTABE = RE('[a-zäöü](?=[ \\t\\n])')
GROSSBUCHSTABE = RE('[A-ZÄÖÜ](?=[ \\t\\n])')
DEU_GROSS = RE('[A-ZÄÖÜ][a-zäöüßę_\\-]+')
DEU_WORT.set(Alternative(DEU_GROSS, DEU_KLEIN, GROSSBUCHSTABE))
NAME = RE('[A-ZÄÖÜÁÀÓÒÚÙÂÔÛ][a-zäöüßáàâóòôúùû]+')
NAMENS_ABKÜRZUNG = RE('[A-ZÄÖÜÁÀÂÓÒÔÚÙÛ]\\.')
Edition = Synonym(FREITEXT)
Datierung = Synonym(FREITEXT)
Stelle = Synonym(FREITEXT)
Werk = Synonym(FREITEXT)
Autor = Synonym(FREITEXT)
ZielName = Synonym(EINZEILER)
VerweisZiel = Series(Token("{"), ZielName, Token("}"))
Verweis = Series(Token("->"), ZielName, mandatory=1)
BelegText = Series(RE('"', wR='', wL=WSP__), FREITEXT, RE('"'), Option(Token(".")), mandatory=2)
Edition = Synonym(EINZEILER)
Datierung = Synonym(EINZEILER)
Stelle = Synonym(EINZEILER)
Werk = Synonym(EINZEILER)
Autor = Synonym(EINZEILER)
ZielID = Synonym(FREITEXT)
Anker = Series(Token("{"), ZielID, Token("}"), mandatory=2)
Verweis = Series(Token("->"), Anker, mandatory=1)
BelegText = Series(RegExp('"'), MEHRZEILER, RE('"'), Option(Token(".")), mandatory=2)
BelegQuelle = Series(Autor, DPP, Werk)
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.set(Series(Token("ZUSATZ"), OneOrMore(Series(Option(TR), zusatz_typ, Option(Token(".")))), mandatory=1))
Quellenangabe = Series(Option(Anker), SomeOf(BelegQuelle, Verweis))
Zitat = Series(Quellenangabe, ZeroOrMore(Series(SEM, Option(ZW), Option(Anker), SomeOf(Stelle, Verweis), Option(Series(Option(ZW), BelegText)))), Option(Series(Option(TR), Zusatz)))
Beleg = Alternative(Series(Verweis, Option(Zitat)), Zitat)
Belege = Series(Option(Token("*")), Beleg, ZeroOrMore(Series(Option(LZ), Token("*"), Beleg)))
zusatz_typ = Alternative(Token("adde"), Token("al"), Token("sim."), Token("saepe"), Token("vel-rarius"), Token("vel"), EINZEILER)
Zusatz.set(Series(Token("ZUSATZ"), OneOrMore(Series(Option(TR), zusatz_typ)), mandatory=1))
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"))
DEU = Alternative(Token("DEUTSCH"), Token("DEU"))
LAT = Alternative(Token("LATEINISCH"), Token("LAT"))
Name = OneOrMore(Alternative(NAME, NAMENS_ABKÜRZUNG))
ArtikelVerfasser = Series(Alternative(Token("AUTORIN"), Token("AUTOR")), Name)
UnterArtikel = Token("UNTER-ARTIKEL")
VerweisPosition = Token("VERWEISE")
Belege = Series(Token("BELEGE"), OneOrMore(Series(ZWW, Token("*"), Beleg)), ABS)
ArtikelVerfasser = Series(ZWW, Alternative(Token("AUTORIN"), Token("AUTOR")), Name)
UnterArtikel = Series(ZWW, Token("UNTER-ARTIKEL"))
VerweisPosition = Series(ZWW, Token("VERWEISE"))
BelegPosition = Series(ZWW, Token("BELEGE"), ZWW, Belege)
BedeutungsQualifikation = Series(Token("["), EINZEILER, ZeroOrMore(Series(SomeOf(SEM, ZW), EINZEILER)), Token("]"), mandatory=3)
DeutscherAusdruck = Series(DEU_WORT, ZeroOrMore(Series(RE(''), DEU_WORT)), Option(Series(RegExp('\\s*'), BedeutungsQualifikation)))
LateinischerAusdruck = Series(LAT_WORT, ZeroOrMore(Series(RE(''), LAT_WORT)), Option(Series(RegExp('\\s*'), BedeutungsQualifikation)))
DeutscheBedeutung = Series(DEU, Option(LZ), DeutscherAusdruck, ZeroOrMore(Series(SomeOf(Token(","), ZW), DeutscherAusdruck)))
LateinischeBedeutung = Series(LAT, Option(LZ), LateinischerAusdruck, ZeroOrMore(Series(SomeOf(Token(","), ZW), LateinischerAusdruck)))
Interpretamente = Series(LateinischeBedeutung, Option(LZ), DeutscheBedeutung, Option(LZ), mandatory=2)
Interpretamente = Series(LateinischeBedeutung, Option(LZ), DeutscheBedeutung, mandatory=2)
Bedeutungskategorie = Series(RE('(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+'), Option(LZ))
Bedeutung = Series(Alternative(Interpretamente, Bedeutungskategorie), Option(Belege))
BedeutungsPosition = OneOrMore(Series(Token("BEDEUTUNG"), Option(LZ), Bedeutung, mandatory=2))
Gegenstand = Synonym(ZEICHENFOLGE)
Variante = Series(NegativeLookahead(KATEGORIENZEILE), Gegenstand, DPP, Beleg)