Currently job artifacts in CI/CD pipelines on LRZ GitLab never expire. Starting from Wed 26.1.2022 the default expiration time will be 30 days (GitLab default). Currently existing artifacts in already completed jobs will not be affected by the change. The latest artifacts for all jobs in the latest successful pipelines will be kept. More information: https://gitlab.lrz.de/help/user/admin_area/settings/continuous_integration.html#default-artifacts-expiration

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

- MLW alle Tests repariert!

parent 8cc1d9da
......@@ -161,7 +161,7 @@ class HistoryRecord:
(self.line_col[0], self.line_col[1], self.stack, str(self.node))
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
def stack(self) -> str:
......@@ -899,7 +899,7 @@ class Grammar:
def prepare_line(record):
excerpt = self.document__.text.__getitem__(record.extent)[:25].replace('\n', '\\n')
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):
path = os.path.join(log_dir(), log_name + "_parser.log")
......@@ -916,6 +916,8 @@ class Grammar:
if not log_file_name:
name = self.__class__.__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 = [], [], []
for record in self.history__:
line = "; ".join(prepare_line(record))
......
......@@ -264,7 +264,7 @@ def grammar_suite(directory, parser_factory, transformer_factory,
err_N = 0
if 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])
for error in all_errors[filename]:
error_report.append('\t' + '\n\t'.join(error.split('\n')))
......
......@@ -11,15 +11,15 @@ LEMMA facitergula
GRAMMATIK
nomen; -ae f.
-us, -i m.: v. ibi
-um, -i n.: v. ibi
-us, -i m.: -> v. ibi
-um, -i n.: -> v. ibi
SCHREIBWEISE
script.:
vizreg-: -> ID_0023
festregel(a): v. ibi
fezdregl(a): v. ibi
festregel(a): -> v. ibi
fezdregl(a): -> v. ibi
BEDEUTUNG
......@@ -34,9 +34,9 @@ BELEGE
* Catal.: thes. Germ.; 18,7 "-eterculi viginti quatuor".
* Libri: confrat. I; 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 "fezdregle."; 6,24 "fasciutercule
VII."; 92,6 "fascercule tres." 21,20 IIII "festregele."
* {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ę"
ZUSATZ saepe.
......
......@@ -36,7 +36,7 @@ LemmaWort = LAT_WORT
LemmaVarianten = [LZ]
{ LemmaVariante §TR }+
[Zusatz]
[Zusatz §ABS]
LemmaVariante = LAT_WORT_TEIL { "-" LAT_WORT_TEIL }
......@@ -54,7 +54,7 @@ wortart = "nomen" | "n."
| "praeposition" | "praep."
flexion = deklination | konjugation
deklination = FLEX §"," FLEX
deklination = FLEX ["," FLEX]
konjugation = FLEX
FLEX = /-?[a-z]+/~
......@@ -62,7 +62,7 @@ genus = "maskulinum" | "m."
| "femininum" | "f."
| "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
Etymologie = FREITEXT
#### ARTIKEL-KOPF ############################################################
ArtikelKopf = < SchreibweisenPosition | StrukturPosition | GebrauchPosition
| MetrikPosition | VerwechselungsPosition >
## Schreibweisen-Position ##
# 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
ArtikelKopf = < SchreibweisenPosition
| StrukturPosition
| GebrauchPosition
| MetrikPosition
| VerwechselungPosition >
SchreibweisenPosition = "SCHREIBWEISE" Position
StrukturPosition = "STRUKTUR" Position
GebrauchPosition = "GEBRAUCH" Position
MetrikPosition = "METRIK" Position
VerwechselungPosition = "VERWECHSELBAR" Position
#### GEBRAUCH-POSITION #######################################################
## ARTIKELKOPF POSITIONEN ##
GebrauchPosition = "GEBRAUCH" [LZ] §{ GBKategorie }+
GBKategorie = GBTyp §DPP [LZ] ( Varianten | { GBKategorie }+ ) [LZ]
GBTyp = ZEICHENFOLGE
#### METRIK-POSITION #########################################################
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
Position = [LZ] §{ Kategorie }+
Kategorie = Besonderheit §DPP [LZ] ( Varianten | { Kategorie }+ ) [LZ]
Besonderheit = FREITEXT
Varianten = Variante { ABS Variante }
Variante = !KATEGORIENZEILE Gegenstand DPP Beleg
Gegenstand = ZEICHENFOLGE
#### BEDEUTUNGS-POSITION #####################################################
##############################################################################
BedeutungsPosition = { "BEDEUTUNG" [LZ] §Bedeutung }+
......@@ -143,8 +108,7 @@ Interpretamente = LateinischeBedeutung [LZ] §DeutscheBedeutung [LZ]
LateinischeBedeutung = LAT /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~
DeutscheBedeutung = DEU /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~
Belege = "BELEGE" [LZ] (EinBeleg | { "*" EinBeleg }) ABS
EinBeleg = { !([LZ] "*" | SCHLUESSELWORT) /\s*[^\n]*/~ [ZW] }+ [Zusatz]
Belege = "BELEGE" { ZWW "*" Beleg }+ ABS
#### VERWEIS-POSITION #####################################################
......@@ -176,16 +140,17 @@ SCHLUESSELWORT = { //~ /\n/ }+ !ROEMISCHE_ZAHL /[A-ZÄÖÜ]{3,}\s+/
#### 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
#### BELEGE ##################################################################
Beleg = (BelegQuelle BelegText) | BelegText | Verweis
BelegQuelle = Autor DPP Werk SEM Stelle [SEM Datierung] [SEM Edition]
BelegText = '"' FREITEXT '"'
Beleg = Verweis | Zitat
Zitat = BelegQuelle { SEM Stelle BelegText } [[TR] Zusatz]
BelegQuelle = Autor DPP Werk
BelegText = ~/"/ FREITEXT /"/~ ["."]
Verweis = "->" ZielName
VerweisZiel = "{" ZielName "}"
......@@ -203,20 +168,21 @@ Edition = FREITEXT
NAMENS_ABKÜRZUNG = /[A-ZÄÖÜÁÀÂÓÒÔÚÙÛ]\./~
NAME = /[A-ZÄÖÜÁÀÓÒÚÙÂÔÛ][a-zäöüßáàâóòôúùû]+/~
DEU_WORT = /[A-ZÄÖÜ]?[a-zäöüß]+/~
DEU_GROSS = /[A-ZÄÖÜ][a-zäöüß]+/~
DEU_KLEIN = /[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]+/~
LAT_WORT_TEIL = /[a-z]+/
GROSSSCHRIFT = /[A-ZÄÖÜ]+/~
ZAHL = /\d+/~
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
FREITEXT = { TEXTELEMENT | /[.()\-\s]+/ | /,(?!,)\s*/ }+
ERW_FREITEXT = { TEXTELEMENT | SATZZEICHEN | /\s+/ }+
FREITEXT = !ZEILENSPRUNG { TEXTELEMENT | /[.()\[\]\-\s]+/ | /,(?!,)\s*/ }+
ERW_FREITEXT = !ZEILENSPRUNG { TEXTELEMENT | SATZZEICHEN | /\s+/ }+
BUCHSTABENFOLGE = /\w+/~
ZEICHENFOLGE = /[\w()-]+/~
......
......@@ -88,7 +88,7 @@ class MLWGrammar(Grammar):
LemmaVarianten = [LZ]
{ LemmaVariante §TR }+
[Zusatz]
[Zusatz §ABS]
LemmaVariante = LAT_WORT_TEIL { "-" LAT_WORT_TEIL }
......@@ -106,7 +106,7 @@ class MLWGrammar(Grammar):
| "praeposition" | "praep."
flexion = deklination | konjugation
deklination = FLEX §"," FLEX
deklination = FLEX ["," FLEX]
konjugation = FLEX
FLEX = /-?[a-z]+/~
......@@ -114,7 +114,7 @@ class MLWGrammar(Grammar):
| "femininum" | "f."
| "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):
Etymologie = FREITEXT
#### ARTIKEL-KOPF ############################################################
ArtikelKopf = < SchreibweisenPosition | StrukturPosition | GebrauchPosition
| MetrikPosition | VerwechselungsPosition >
## Schreibweisen-Position ##
# 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
ArtikelKopf = < SchreibweisenPosition
| StrukturPosition
| GebrauchPosition
| MetrikPosition
| VerwechselungPosition >
SchreibweisenPosition = "SCHREIBWEISE" Position
StrukturPosition = "STRUKTUR" Position
GebrauchPosition = "GEBRAUCH" Position
MetrikPosition = "METRIK" Position
VerwechselungPosition = "VERWECHSELBAR" Position
#### GEBRAUCH-POSITION #######################################################
## ARTIKELKOPF POSITIONEN ##
GebrauchPosition = "GEBRAUCH" [LZ] §{ GBKategorie }+
GBKategorie = GBTyp §DPP [LZ] ( Varianten | { GBKategorie }+ ) [LZ]
GBTyp = ZEICHENFOLGE
#### METRIK-POSITION #########################################################
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
Position = [LZ] §{ Kategorie }+
Kategorie = Besonderheit §DPP [LZ] ( Varianten | { Kategorie }+ ) [LZ]
Besonderheit = FREITEXT
Varianten = Variante { ABS Variante }
Variante = !KATEGORIENZEILE Gegenstand DPP Beleg
Gegenstand = ZEICHENFOLGE
#### BEDEUTUNGS-POSITION #####################################################
##############################################################################
BedeutungsPosition = { "BEDEUTUNG" [LZ] §Bedeutung }+
......@@ -195,8 +160,7 @@ class MLWGrammar(Grammar):
LateinischeBedeutung = LAT /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~
DeutscheBedeutung = DEU /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~
Belege = "BELEGE" [LZ] (EinBeleg | { "*" EinBeleg }) ABS
EinBeleg = { !([LZ] "*" | SCHLUESSELWORT) /\s*[^\n]*/~ [ZW] }+ [Zusatz]
Belege = "BELEGE" { ZWW "*" Beleg }+ ABS
#### VERWEIS-POSITION #####################################################
......@@ -228,16 +192,17 @@ class MLWGrammar(Grammar):
#### 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
#### BELEGE ##################################################################
Beleg = (BelegQuelle BelegText) | BelegText | Verweis
BelegQuelle = Autor DPP Werk SEM Stelle [SEM Datierung] [SEM Edition]
BelegText = '"' FREITEXT '"'
Beleg = Verweis | Zitat
Zitat = BelegQuelle { SEM Stelle BelegText } [[TR] Zusatz]
BelegQuelle = Autor DPP Werk
BelegText = ~/"/ FREITEXT /"/~ ["."]
Verweis = "->" ZielName
VerweisZiel = "{" ZielName "}"
......@@ -255,20 +220,21 @@ class MLWGrammar(Grammar):
NAMENS_ABKÜRZUNG = /[A-ZÄÖÜÁÀÂÓÒÔÚÙÛ]\./~
NAME = /[A-ZÄÖÜÁÀÓÒÚÙÂÔÛ][a-zäöüßáàâóòôúùû]+/~
DEU_WORT = /[A-ZÄÖÜ]?[a-zäöüß]+/~
DEU_GROSS = /[A-ZÄÖÜ][a-zäöüß]+/~
DEU_KLEIN = /[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]+/~
LAT_WORT_TEIL = /[a-z]+/
GROSSSCHRIFT = /[A-ZÄÖÜ]+/~
ZAHL = /\d+/~
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
FREITEXT = { TEXTELEMENT | /[.()\-\s]+/ | /,(?!,)\s*/ }+
ERW_FREITEXT = { TEXTELEMENT | SATZZEICHEN | /\s+/ }+
FREITEXT = !ZEILENSPRUNG { TEXTELEMENT | /[.()\[\]\-\s]+/ | /,(?!,)\s*/ }+
ERW_FREITEXT = !ZEILENSPRUNG { TEXTELEMENT | SATZZEICHEN | /\s+/ }+
BUCHSTABENFOLGE = /\w+/~
ZEICHENFOLGE = /[\w()-]+/~
......@@ -297,19 +263,16 @@ class MLWGrammar(Grammar):
DUMMY = "EBNF-Grammatik an dieser Stelle noch nicht definiert!"
"""
DEU_WORT = Forward()
GBKategorie = Forward()
MTKategorie = Forward()
Kategorie = Forward()
ROEMISCHE_ZAHL = Forward()
SATZZEICHEN = Forward()
STKategorie = Forward()
SWKategorie = Forward()
TEXTELEMENT = Forward()
VWKategorie = Forward()
ZAHL = Forward()
Zusatz = Forward()
flexion = Forward()
genus = Forward()
wortart = Forward()
source_hash__ = "1b6cf564c748b80f149503b3650c7ccd"
source_hash__ = "3e563592ce262f34a151a9f65f997b6b"
parser_initialization__ = "upon instantiation"
COMMENT__ = r'#.*'
WHITESPACE__ = r'[\t ]*'
......@@ -335,18 +298,19 @@ class MLWGrammar(Grammar):
TR = Alternative(ABS, LZ)
ZEICHENFOLGE = RE('[\\w()-]+')
BUCHSTABENFOLGE = RE('\\w+')
ERW_FREITEXT = OneOrMore(Alternative(TEXTELEMENT, SATZZEICHEN, RegExp('\\s+')))
FREITEXT = OneOrMore(Alternative(TEXTELEMENT, RegExp('[.()\\-\\s]+'), RegExp(',(?!,)\\s*')))
ERW_FREITEXT = Series(NegativeLookahead(ZEILENSPRUNG), OneOrMore(Alternative(TEXTELEMENT, SATZZEICHEN, RegExp('\\s+'))))
FREITEXT = Series(NegativeLookahead(ZEILENSPRUNG), OneOrMore(Alternative(TEXTELEMENT, RegExp('[.()\\[\\]\\-\\s]+'), RegExp(',(?!,)\\s*'))))
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*)'))
ZAHL.set(RE('\\d+'))
GROSSSCHRIFT = RE('[A-ZÄÖÜ]+')
LAT_WORT_TEIL = RegExp('[a-z]+')
LAT_WORT = RE('[a-z]+')
DEU_KLEIN = RE('[a-zäöüß]+')
DEU_GROSS = RE('[A-ZÄÖÜ][a-zäöüß]+')
DEU_WORT.set(RE('[A-ZÄÖÜ]?[a-zäöüß]+'))
DEU_KLEIN = RE('[a-zäöüßę]+')
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)
......@@ -357,11 +321,12 @@ class MLWGrammar(Grammar):
ZielName = Synonym(BUCHSTABENFOLGE)
VerweisZiel = Series(Token("{"), ZielName, Token("}"))
Verweis = Series(Token("->"), ZielName)
BelegText = Series(Token('"'), FREITEXT, Token('"'))
BelegQuelle = Series(Autor, DPP, Werk, SEM, Stelle, Option(Series(SEM, Datierung)), Option(Series(SEM, Edition)))
Beleg = Alternative(Series(BelegQuelle, BelegText), BelegText, Verweis)
BelegText = Series(RE('"', wR='', wL=WSP__), FREITEXT, RE('"'), Option(Token(".")))
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 = 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+'))
GRI = Alternative(Token("GRIECHISCH"), Token("GRIECH"), Token("GRIE"), Token("GRI"))
DEU = Alternative(Token("DEUTSCH"), Token("DEU"))
......@@ -370,8 +335,7 @@ class MLWGrammar(Grammar):
ArtikelVerfasser = Series(Alternative(Token("AUTORIN"), Token("AUTOR")), Name)
UnterArtikel = Token("UNTER-ARTIKEL")
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"), Option(LZ), Alternative(EinBeleg, ZeroOrMore(Series(Token("*"), EinBeleg))), ABS)
Belege = Series(Token("BELEGE"), OneOrMore(Series(ZWW, Token("*"), Beleg)), ABS)
DeutscheBedeutung = Series(DEU, RE('(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+'))
LateinischeBedeutung = Series(LAT, RE('(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+'))
Interpretamente = Series(LateinischeBedeutung, Option(LZ), DeutscheBedeutung, Option(LZ), mandatory=2)
......@@ -381,28 +345,15 @@ class MLWGrammar(Grammar):
Gegenstand = Synonym(ZEICHENFOLGE)
Variante = Series(NegativeLookahead(KATEGORIENZEILE), Gegenstand, DPP, Beleg)
Varianten = Series(Variante, ZeroOrMore(Series(ABS, Variante)))
VWTyp = Synonym(ZEICHENFOLGE)
VWKategorie.set(Series(VWTyp, DPP, Option(LZ), Alternative(Varianten, OneOrMore(VWKategorie)), Option(LZ), mandatory=1))
VerwechselungsPosition = Series(Token("VERWECHSELBAR"), Option(LZ), OneOrMore(VWKategorie), mandatory=2)
MTTyp = Synonym(ZEICHENFOLGE)
MTKategorie.set(Series(MTTyp, DPP, Option(LZ), Alternative(Varianten, OneOrMore(MTKategorie)), Option(LZ), mandatory=1))
MetrikPosition = Series(Token("METRIK"), Option(LZ), OneOrMore(MTKategorie), mandatory=2)
GBTyp = Synonym(ZEICHENFOLGE)
GBKategorie.set(Series(GBTyp, DPP, Option(LZ), Alternative(Varianten, OneOrMore(GBKategorie)), Option(LZ), mandatory=1))
GebrauchPosition = Series(Token("GEBRAUCH"), Option(LZ), OneOrMore(GBKategorie), mandatory=2)
STTyp = Synonym(ZEICHENFOLGE)
STKategorie.set(Series(STTyp, DPP, Option(LZ), Alternative(Varianten, OneOrMore(STKategorie)), Option(LZ), mandatory=1))
StrukturPosition = Series(Token("STRUKTUR"), Option(LZ), OneOrMore(STKategorie), mandatory=2)
abl = Token("abl.")
gen = Token("gen.")
form = Token("form")
script = Token("srcipt.")
scriptform = Series(Token("script. "), Token("form"))
scriptfat = Series(Token("script."), Token("fat-"))
SWTyp = Alternative(scriptfat, scriptform, script, form, gen, abl, FREITEXT)
SWKategorie.set(Series(SWTyp, DPP, Option(LZ), Alternative(Varianten, OneOrMore(SWKategorie)), Option(LZ), mandatory=1))
SchreibweisenPosition = Series(Token("SCHREIBWEISE"), Option(LZ), OneOrMore(SWKategorie))
ArtikelKopf = SomeOf(SchreibweisenPosition, StrukturPosition, GebrauchPosition, MetrikPosition, VerwechselungsPosition)
Besonderheit = Synonym(FREITEXT)
Kategorie.set(Series(Besonderheit, DPP, Option(LZ), Alternative(Varianten, OneOrMore(Kategorie)), Option(LZ), mandatory=1))
Position = Series(Option(LZ), OneOrMore(Kategorie), mandatory=1)
VerwechselungPosition = Series(Token("VERWECHSELBAR"), Position)
MetrikPosition = Series(Token("METRIK"), Position)
GebrauchPosition = Series(Token("GEBRAUCH"), Position)
StrukturPosition = Series(Token("STRUKTUR"), Position)
SchreibweisenPosition = Series(Token("SCHREIBWEISE"), Position)
ArtikelKopf = SomeOf(SchreibweisenPosition, StrukturPosition, GebrauchPosition, MetrikPosition, VerwechselungPosition)
Etymologie = Synonym(FREITEXT)
EtymologieBesonderheit = Synonym(FREITEXT)
EtymologieVariante = Alternative(LAT, Series(GRI, Option(EtymologieBesonderheit), Option(Series(Token("ETYM"), Etymologie)), DPP, Beleg))
......@@ -411,13 +362,13 @@ class MLWGrammar(Grammar):
genus.set(Alternative(Token("maskulinum"), Token("m."), Token("femininum"), Token("f."), Token("neutrum"), Token("n.")))
FLEX = RE('-?[a-z]+')
konjugation = Synonym(FLEX)
deklination = Series(FLEX, Token(","), FLEX, mandatory=1)
deklination = Series(FLEX, Option(Series(Token(","), FLEX)))
flexion.set(Alternative(deklination, konjugation))
wortart.set(Alternative(Token("nomen"), Token("n."), Token("verb"), Token("v."), Token("adverb"), Token("adv."), Token("adjektiv"), Token("adj."), Token("praeposition"), Token("praep.")))
Grammatik = Series(wortart, ABS, flexion, Option(genus), mandatory=1)
GrammatikPosition = Series(Token("GRAMMATIK"), Option(LZ), Grammatik, ABS, ZeroOrMore(Series(GrammatikVariante, ABS, mandatory=1)), mandatory=2)
LemmaVariante = Series(LAT_WORT_TEIL, ZeroOrMore(Series(Token("-"), LAT_WORT_TEIL)))
LemmaVarianten = Series(Option(LZ), OneOrMore(Series(LemmaVariante, TR, mandatory=1)), Option(Zusatz))
LemmaVarianten = Series(Option(LZ), OneOrMore(Series(LemmaVariante, TR, mandatory=1)), Option(Series(Zusatz, ABS, mandatory=1)))
LemmaWort = Synonym(LAT_WORT)
gesichert = Token("$")
klassisch = Token("*")
......
line: 191, column: 1, Warning: Rule "VerweisZiel" is not connected to parser root "Artikel" !
line: 207, column: 1, Warning: Rule "DEU_GROSS" is not connected to parser root "Artikel" !
line: 208, column: 1, Warning: Rule "DEU_KLEIN" is not connected to parser root "Artikel" !
line: 211, column: 1, Warning: Rule "GROSSSCHRIFT" is not connected to parser root "Artikel" !
line: 215, column: 1, Warning: Rule "SATZZEICHEN" is not connected to parser root "Artikel" !
line: 219, column: 1, Warning: Rule "ERW_FREITEXT" is not connected to parser root "Artikel" !
line: 236, column: 1, Warning: Rule "RZS" is not connected to parser root "Artikel" !
line: 243, column: 1, Warning: Rule "NIEMALS" is not connected to parser root "Artikel" !
line: 245, column: 1, Warning: Rule "DUMMY" is not connected to parser root "Artikel" !
line: 137, column: 1, Warning: Rule "SCHLUESSELWORT" is not connected to parser root "Artikel" !
line: 156, column: 1, Warning: Rule "VerweisZiel" is not connected to parser root "Artikel" !
line: 162, column: 1, Warning: Rule "Datierung" is not connected to parser root "Artikel" !
line: 163, column: 1, Warning: Rule "Edition" is not connected to parser root "Artikel" !
line: 177, column: 1, Warning: Rule "GROSSSCHRIFT" is not connected to parser root "Artikel" !
line: 181, column: 1, Warning: Rule "SATZZEICHEN" is not connected to parser root "Artikel" !
line: 185, column: 1, Warning: Rule "ERW_FREITEXT" is not connected to parser root "Artikel" !
line: 197, column: 1, Warning: Rule "ZW" is not connected to parser root "Artikel" !
line: 199, column: 1, Warning: Rule "LÜCKE" is not connected to parser root "Artikel" !
line: 201, column: 1, Warning: Rule "LEERZEILE" is not connected to parser root "Artikel" !
line: 202, column: 1, Warning: Rule "RZS" is not connected to parser root "Artikel" !
line: 205, column: 1, Warning: Rule "KOMMENTARZEILEN" is not connected to parser root "Artikel" !
line: 209, column: 1, Warning: Rule "NIEMALS" is not connected to parser root "Artikel" !
line: 211, column: 1, Warning: Rule "DUMMY" is not connected to parser root "Artikel" !
<?xml version="1.0" encoding="UTF-8"?>
<!-- DTD für MLW Erfassung neuer Artikel -->
<!-- erstellt von Ursula Welsch, BADW -->
<!-- Stand: 6.7.2017 -->
<!-- Parameter-Entities -->
<!ENTITY % textauszeichnungen "kursiv | gesperrt | gerade" >
<!ENTITY % gesichert "gesichert (ja | nein) 'ja'" >
<!-- Lexikon -->
<!ELEMENT MLW-test (artikel)+ >
<!-- Artikel -->
<!ELEMENT artikel (lemma-position, artikelkopf?, bedeutung-position, verweis-position?, sub-artikel*, artikel-verfasser) >
<!ATTLIST artikel xml:id ID #REQUIRED >
<!-- =========================-->
<!-- Lemma-Ansatz -->
<!-- =========================-->
<!ELEMENT lemma-position (((lemma, lemma-varianten?, grammatik-position?) | ((lemma-position | zusatz), lemma-varianten?, grammatik-position?)+), etymologie-position?) >
<!ATTLIST lemma-position nr CDATA #IMPLIED >
<!-- Lemma -->
<!ELEMENT lemma (#PCDATA) >
<!ATTLIST lemma
klassisch (ja | nein) "ja"
gesichert (ja | nein) "ja"
>
<!-- Lemma-Varianten -->
<!ELEMENT lemma-varianten (lemma-variante+, zusatz?) >
<!ELEMENT lemma-variante (#PCDATA) >
<!ATTLIST lemma-variante kurz CDATA #IMPLIED >
<!-- Grammatik-Position -->
<!ELEMENT grammatik-position (grammatik, grammatik-varianten?) >
<!-- Grammatikangaben -->
<!ELEMENT grammatik (#PCDATA) >
<!ATTLIST grammatik
wortart (adverb | adjektiv | interjektion | numerale | partikel | praeposition | pronomen | substantiv | verb) #REQUIRED
klasse-substantiv (I | II | III | IV | V | anormal) #IMPLIED
klasse-adjektiv (I-II | III | anormal) #IMPLIED
genus (m | f | n | m-n | m-f | m-f-raro | m-f-rarius) #IMPLIED
klasse-verb (I | II | III | IV | anormal) #IMPLIED
><!-- genus m-n = m. vel n. -->
<!-- Grammatik-Varianten -->
<!ELEMENT grammatik-varianten (grammatik-variante+) >
<!ELEMENT grammatik-variante (grammatik, beleg+) >
<!-- Etymologie-Position -->
<!ELEMENT etymologie-position (#PCDATA | etymologie-angabe | verweis)* >
<!ELEMENT etymologie-angabe (#PCDATA) >
<!ATTLIST etymologie-angabe
sprache (griech | francogal | ital | lat-klass | lat-mlw | lat-erschlossen) "lat-klass"