Starting from 2021-07-01, all LRZ GitLab users will be required to explicitly accept the GitLab Terms of Service. Please see the detailed information at https://doku.lrz.de/display/PUBLIC/GitLab and make sure that your projects conform to the requirements.

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