Commit 10c52b21 authored by di68kap's avatar di68kap
Browse files

- stringview.StringView.replace method added

- changes to MLW.ebnf
parent 7fdfefd8
...@@ -1431,7 +1431,8 @@ class Series(NaryOperator): ...@@ -1431,7 +1431,8 @@ class Series(NaryOperator):
match = text.search(Series.RX_ARGUMENT) match = text.search(Series.RX_ARGUMENT)
i = max(1, text.index(match.regs[1][0])) if match else 1 i = max(1, text.index(match.regs[1][0])) if match else 1
node = Node(self, text_[:i]) node = Node(self, text_[:i])
node.add_error('%s expected; "%s" found!' % (str(parser), text_[:10]), node.add_error('%s expected; "%s" found!'
% (str(parser), text_[:10].replace('\n', '\\n ')),
code=Error.MANDATORY_CONTINUATION) code=Error.MANDATORY_CONTINUATION)
text_ = text_[i:] text_ = text_[i:]
results += (node,) results += (node,)
......
...@@ -256,5 +256,9 @@ class StringView(collections.abc.Sized): ...@@ -256,5 +256,9 @@ class StringView(collections.abc.Sized):
pieces.append(self.text[self.begin + k : self.end]) pieces.append(self.text[self.begin + k : self.end])
return pieces return pieces
def replace(self, old, new):
"""Returns a string where `old` is replaced by `new`."""
return str(self).replace(old, new)
EMPTY_STRING_VIEW = StringView('') EMPTY_STRING_VIEW = StringView('')
...@@ -333,7 +333,7 @@ strictly separated steps: ...@@ -333,7 +333,7 @@ strictly separated steps:
what you like. what you like.
DHParser automatically only generates a parser for the very first step. DHParser automatically only generates a parser for the very first step.
The other steps have to be programmed by hand, though DHParser makes The other steps have to be programmed by hand, though DHParser
tries to make those parts as easy as possible. What you have just seen tries to make those parts as easy as possible. What you have just seen
in your editor is a Pseudo-XML-representation of the concrete syntax in your editor is a Pseudo-XML-representation of the concrete syntax
tree. (The output of a parser is always a tree structure, just like tree. (The output of a parser is always a tree structure, just like
......
...@@ -17,7 +17,7 @@ GRAMMATIK ...@@ -17,7 +17,7 @@ GRAMMATIK
SCHREIBWEISE SCHREIBWEISE
script.: script.:
vizreg-: -> ID_0023 vizreg-: -> Verweis_1
festregel(a): -> v. ibi festregel(a): -> v. ibi
fezdregl(a): -> v. ibi fezdregl(a): -> v. ibi
...@@ -34,7 +34,7 @@ BELEGE ...@@ -34,7 +34,7 @@ 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 "fezdreglę"; 6,24 "fasciutercule VII"; II."; 24,8 "-itella X"; 114,8 VIII "fezdreglę"; 6,24 "fasciutercule VII";
92,6 "fascerculę tres"; 21,20 IIII "festregelę" 92,6 "fascerculę tres"; 21,20 IIII "festregelę"
ZUSATZ saepe. ZUSATZ saepe.
......
...@@ -38,7 +38,7 @@ LemmaVarianten = [LZ] ...@@ -38,7 +38,7 @@ LemmaVarianten = [LZ]
{ LemmaVariante §TR }+ { LemmaVariante §TR }+
[Zusatz §ABS] [Zusatz §ABS]
LemmaVariante = LAT_WORT_TEIL { "-" LAT_WORT_TEIL } LemmaVariante = LAT_WORT
## GRAMMATIK-POSITION ## ## GRAMMATIK-POSITION ##
...@@ -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 }+ # Beleg { SEM Beleg } GrammatikVariante = [wortart ABS] flexion [genus] DPP Beleg { FORTSETZUNG Beleg } # Beleg { SEM Beleg }
...@@ -91,7 +91,7 @@ VerwechselungPosition = "VERWECHSELBAR" Position ...@@ -91,7 +91,7 @@ VerwechselungPosition = "VERWECHSELBAR" Position
## ARTIKELKOPF POSITIONEN ## ## ARTIKELKOPF POSITIONEN ##
Position = [LZ] §{ Kategorie }+ Position = [LZ] §{ Kategorie }+
Kategorie = Besonderheit §DPP [LZ] ( Varianten | { Kategorie }+ ) [LZ] Kategorie = Besonderheit §DPP [LZ] ( Varianten | { Kategorie }+ ) ZWW
Besonderheit = FREITEXT Besonderheit = FREITEXT
Varianten = Variante { ABS Variante } Varianten = Variante { ABS Variante }
Variante = !KATEGORIENZEILE Gegenstand DPP Beleg Variante = !KATEGORIENZEILE Gegenstand DPP Beleg
...@@ -100,15 +100,20 @@ Gegenstand = ZEICHENFOLGE ...@@ -100,15 +100,20 @@ Gegenstand = ZEICHENFOLGE
#### BEDEUTUNGS-POSITION ##################################################### #### BEDEUTUNGS-POSITION #####################################################
BedeutungsPosition = { "BEDEUTUNG" [LZ] §Bedeutung }+ BedeutungsPosition = { "BEDEUTUNG" [LZ] §Bedeutung }+
Bedeutung = (Interpretamente | Bedeutungskategorie) [Belege] Bedeutung = (Interpretamente | Bedeutungskategorie) [Belege]
Bedeutungskategorie = /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~ [LZ] Bedeutungskategorie = /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~ [LZ]
Interpretamente = LateinischeBedeutung [LZ] §DeutscheBedeutung [LZ] Interpretamente = LateinischeBedeutung [LZ] §DeutscheBedeutung [LZ]
LateinischeBedeutung = LAT /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~ LateinischeBedeutung = LAT [LZ] LateinischerAusdruck { <","|ZW> LateinischerAusdruck }
DeutscheBedeutung = DEU /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~ DeutscheBedeutung = DEU [LZ] DeutscherAusdruck { <","|ZW> DeutscherAusdruck }
Belege = "BELEGE" { ZWW "*" Beleg }+ ABS LateinischerAusdruck = LAT_WORT { //~ LAT_WORT } [/\s*/ BedeutungsQualifikation]
DeutscherAusdruck = DEU_WORT { //~ DEU_WORT } [/\s*/ BedeutungsQualifikation]
BedeutungsQualifikation = "[" EINZEILER { <SEM|ZW> EINZEILER } §"]"
Belege = "BELEGE" { ZWW "*" Beleg }+ ABS
#### VERWEIS-POSITION ##################################################### #### VERWEIS-POSITION #####################################################
...@@ -150,11 +155,11 @@ Zusatz = "ZUSATZ" §{ [TR] zusatz_typ ["."] }+ ...@@ -150,11 +155,11 @@ Zusatz = "ZUSATZ" §{ [TR] zusatz_typ ["."] }+
Beleg = Verweis | Zitat Beleg = Verweis | Zitat
Zitat = BelegQuelle { SEM Stelle BelegText } [[TR] Zusatz] Zitat = BelegQuelle { SEM Stelle BelegText } [[TR] Zusatz]
BelegQuelle = Autor DPP Werk BelegQuelle = Autor DPP Werk
BelegText = ~/"/ FREITEXT /"/~ ["."] BelegText = ~/"/ FREITEXT §/"/~ ["."]
Verweis = "->" ZielName Verweis = "->" §ZielName
VerweisZiel = "{" ZielName "}" VerweisZiel = "{" ZielName "}"
ZielName = BUCHSTABENFOLGE ZielName = EINZEILER
Autor = FREITEXT Autor = FREITEXT
Werk = FREITEXT Werk = FREITEXT
...@@ -169,23 +174,22 @@ NAMENS_ABKÜRZUNG = /[A-ZÄÖÜÁÀÂÓÒÔÚÙÛ]\./~ ...@@ -169,23 +174,22 @@ NAMENS_ABKÜRZUNG = /[A-ZÄÖÜÁÀÂÓÒÔÚÙÛ]\./~
NAME = /[A-ZÄÖÜÁÀÓÒÚÙÂÔÛ][a-zäöüßáàâóòôúùû]+/~ NAME = /[A-ZÄÖÜÁÀÓÒÚÙÂÔÛ][a-zäöüßáàâóòôúùû]+/~
DEU_WORT = DEU_GROSS | DEU_KLEIN | GROSSBUCHSTABE DEU_WORT = DEU_GROSS | DEU_KLEIN | GROSSBUCHSTABE
DEU_GROSS = /[A-ZÄÖÜ][a-zäöüßę]+/~ DEU_GROSS = /[A-ZÄÖÜ][a-zäöüßę\-]+/
GROSSBUCHSTABE = /[A-ZÄÖÜ](?=[ \t\n])/~ GROSSBUCHSTABE = /[A-ZÄÖÜ](?=[ \t\n])/
DEU_KLEIN = /[a-zäöüßę]+/~ DEU_KLEIN = /[a-zäöüßę\-]+/
LAT_WORT = /[a-z]+/~ LAT_WORT = /[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
FREITEXT = !ZEILENSPRUNG { TEXTELEMENT | /[.()\[\]\-\s]+/ | /,(?!,)\s*/ }+
ERW_FREITEXT = !ZEILENSPRUNG { TEXTELEMENT | SATZZEICHEN | /\s+/ }+
BUCHSTABENFOLGE = /\w+/~ BUCHSTABENFOLGE = /\w+/~
ZEICHENFOLGE = /[\w()-]+/~ ZEICHENFOLGE = /[\w()-]+/~
EINZEILER = /[\w()-. \t]+/~
TEXTELEMENT = (DEU_WORT //~) | ZAHL | ROEMISCHE_ZAHL
FREITEXT = { TEXTELEMENT | /[.()\[\]\-\s]+/ | /,(?!,)\s*/ }+
ERW_FREITEXT = { TEXTELEMENT | SATZZEICHEN | /\s+/ }+
TR = ABS | LZ # (beliebiger) Trenner TR = ABS | LZ # (beliebiger) Trenner
ABS = /\s*;;?\s*/ | { ZWW }+ # Abschluss (durch Semikolon oder Zeilenwechsel) ABS = /\s*;;?\s*/ | { ZWW }+ # Abschluss (durch Semikolon oder Zeilenwechsel)
...@@ -204,6 +208,7 @@ RZS = /\s*?\n|$/ # Rückwärtiger Zeilensprung oder T ...@@ -204,6 +208,7 @@ RZS = /\s*?\n|$/ # Rückwärtiger Zeilensprung oder T
ZEILENSPRUNG = /[ \t]*\n/~ ZEILENSPRUNG = /[ \t]*\n/~
KOMMENTARZEILEN = { /[ \t]*\n?[ \t]*/ COMMENT__ } # echte Kommentarzeilen KOMMENTARZEILEN = { /[ \t]*\n?[ \t]*/ COMMENT__ } # echte Kommentarzeilen
KATEGORIENZEILE = /[^:\n]+[:][ \t]*\n/ # Kategorienzeilen enthalten genau einen Doppelpunkt am Ende der Zeile KATEGORIENZEILE = /[^:\n]+[:][ \t]*\n/ # Kategorienzeilen enthalten genau einen Doppelpunkt am Ende der Zeile
FORTSETZUNG = !(ZWW /[^:\n]+[:]/)
DATEI_ENDE = !/./ DATEI_ENDE = !/./
NIEMALS = /(?!.)/ NIEMALS = /(?!.)/
......
...@@ -90,7 +90,7 @@ class MLWGrammar(Grammar): ...@@ -90,7 +90,7 @@ class MLWGrammar(Grammar):
{ LemmaVariante §TR }+ { LemmaVariante §TR }+
[Zusatz §ABS] [Zusatz §ABS]
LemmaVariante = LAT_WORT_TEIL { "-" LAT_WORT_TEIL } LemmaVariante = LAT_WORT
## GRAMMATIK-POSITION ## ## GRAMMATIK-POSITION ##
...@@ -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 }+ # Beleg { SEM Beleg } GrammatikVariante = [wortart ABS] flexion [genus] DPP Beleg { FORTSETZUNG Beleg } # Beleg { SEM Beleg }
...@@ -143,7 +143,7 @@ class MLWGrammar(Grammar): ...@@ -143,7 +143,7 @@ class MLWGrammar(Grammar):
## ARTIKELKOPF POSITIONEN ## ## ARTIKELKOPF POSITIONEN ##
Position = [LZ] §{ Kategorie }+ Position = [LZ] §{ Kategorie }+
Kategorie = Besonderheit §DPP [LZ] ( Varianten | { Kategorie }+ ) [LZ] Kategorie = Besonderheit §DPP [LZ] ( Varianten | { Kategorie }+ ) ZWW
Besonderheit = FREITEXT Besonderheit = FREITEXT
Varianten = Variante { ABS Variante } Varianten = Variante { ABS Variante }
Variante = !KATEGORIENZEILE Gegenstand DPP Beleg Variante = !KATEGORIENZEILE Gegenstand DPP Beleg
...@@ -152,15 +152,20 @@ class MLWGrammar(Grammar): ...@@ -152,15 +152,20 @@ class MLWGrammar(Grammar):
#### BEDEUTUNGS-POSITION ##################################################### #### BEDEUTUNGS-POSITION #####################################################
BedeutungsPosition = { "BEDEUTUNG" [LZ] §Bedeutung }+ BedeutungsPosition = { "BEDEUTUNG" [LZ] §Bedeutung }+
Bedeutung = (Interpretamente | Bedeutungskategorie) [Belege] Bedeutung = (Interpretamente | Bedeutungskategorie) [Belege]
Bedeutungskategorie = /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~ [LZ] Bedeutungskategorie = /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~ [LZ]
Interpretamente = LateinischeBedeutung [LZ] §DeutscheBedeutung [LZ] Interpretamente = LateinischeBedeutung [LZ] §DeutscheBedeutung [LZ]
LateinischeBedeutung = LAT /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~ LateinischeBedeutung = LAT [LZ] LateinischerAusdruck { <","|ZW> LateinischerAusdruck }
DeutscheBedeutung = DEU /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~ DeutscheBedeutung = DEU [LZ] DeutscherAusdruck { <","|ZW> DeutscherAusdruck }
Belege = "BELEGE" { ZWW "*" Beleg }+ ABS LateinischerAusdruck = LAT_WORT { //~ LAT_WORT } [/\s*/ BedeutungsQualifikation]
DeutscherAusdruck = DEU_WORT { //~ DEU_WORT } [/\s*/ BedeutungsQualifikation]
BedeutungsQualifikation = "[" EINZEILER { <SEM|ZW> EINZEILER } §"]"
Belege = "BELEGE" { ZWW "*" Beleg }+ ABS
#### VERWEIS-POSITION ##################################################### #### VERWEIS-POSITION #####################################################
...@@ -202,11 +207,11 @@ class MLWGrammar(Grammar): ...@@ -202,11 +207,11 @@ class MLWGrammar(Grammar):
Beleg = Verweis | Zitat Beleg = Verweis | Zitat
Zitat = BelegQuelle { SEM Stelle BelegText } [[TR] Zusatz] Zitat = BelegQuelle { SEM Stelle BelegText } [[TR] Zusatz]
BelegQuelle = Autor DPP Werk BelegQuelle = Autor DPP Werk
BelegText = ~/"/ FREITEXT /"/~ ["."] BelegText = ~/"/ FREITEXT §/"/~ ["."]
Verweis = "->" ZielName Verweis = "->" §ZielName
VerweisZiel = "{" ZielName "}" VerweisZiel = "{" ZielName "}"
ZielName = BUCHSTABENFOLGE ZielName = EINZEILER
Autor = FREITEXT Autor = FREITEXT
Werk = FREITEXT Werk = FREITEXT
...@@ -221,23 +226,22 @@ class MLWGrammar(Grammar): ...@@ -221,23 +226,22 @@ class MLWGrammar(Grammar):
NAME = /[A-ZÄÖÜÁÀÓÒÚÙÂÔÛ][a-zäöüßáàâóòôúùû]+/~ NAME = /[A-ZÄÖÜÁÀÓÒÚÙÂÔÛ][a-zäöüßáàâóòôúùû]+/~
DEU_WORT = DEU_GROSS | DEU_KLEIN | GROSSBUCHSTABE DEU_WORT = DEU_GROSS | DEU_KLEIN | GROSSBUCHSTABE
DEU_GROSS = /[A-ZÄÖÜ][a-zäöüßę]+/~ DEU_GROSS = /[A-ZÄÖÜ][a-zäöüßę\-]+/
GROSSBUCHSTABE = /[A-ZÄÖÜ](?=[ \t\n])/~ GROSSBUCHSTABE = /[A-ZÄÖÜ](?=[ \t\n])/
DEU_KLEIN = /[a-zäöüßę]+/~ DEU_KLEIN = /[a-zäöüßę\-]+/
LAT_WORT = /[a-z]+/~ LAT_WORT = /[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
FREITEXT = !ZEILENSPRUNG { TEXTELEMENT | /[.()\[\]\-\s]+/ | /,(?!,)\s*/ }+
ERW_FREITEXT = !ZEILENSPRUNG { TEXTELEMENT | SATZZEICHEN | /\s+/ }+
BUCHSTABENFOLGE = /\w+/~ BUCHSTABENFOLGE = /\w+/~
ZEICHENFOLGE = /[\w()-]+/~ ZEICHENFOLGE = /[\w()-]+/~
EINZEILER = /[\w()-. \t]+/~
TEXTELEMENT = (DEU_WORT //~) | ZAHL | ROEMISCHE_ZAHL
FREITEXT = { TEXTELEMENT | /[.()\[\]\-\s]+/ | /,(?!,)\s*/ }+
ERW_FREITEXT = { TEXTELEMENT | SATZZEICHEN | /\s+/ }+
TR = ABS | LZ # (beliebiger) Trenner TR = ABS | LZ # (beliebiger) Trenner
ABS = /\s*;;?\s*/ | { ZWW }+ # Abschluss (durch Semikolon oder Zeilenwechsel) ABS = /\s*;;?\s*/ | { ZWW }+ # Abschluss (durch Semikolon oder Zeilenwechsel)
...@@ -256,6 +260,7 @@ class MLWGrammar(Grammar): ...@@ -256,6 +260,7 @@ class MLWGrammar(Grammar):
ZEILENSPRUNG = /[ \t]*\n/~ ZEILENSPRUNG = /[ \t]*\n/~
KOMMENTARZEILEN = { /[ \t]*\n?[ \t]*/ COMMENT__ } # echte Kommentarzeilen KOMMENTARZEILEN = { /[ \t]*\n?[ \t]*/ COMMENT__ } # echte Kommentarzeilen
KATEGORIENZEILE = /[^:\n]+[:][ \t]*\n/ # Kategorienzeilen enthalten genau einen Doppelpunkt am Ende der Zeile KATEGORIENZEILE = /[^:\n]+[:][ \t]*\n/ # Kategorienzeilen enthalten genau einen Doppelpunkt am Ende der Zeile
FORTSETZUNG = !(ZWW /[^:\n]+[:]/)
DATEI_ENDE = !/./ DATEI_ENDE = !/./
NIEMALS = /(?!.)/ NIEMALS = /(?!.)/
...@@ -268,11 +273,12 @@ class MLWGrammar(Grammar): ...@@ -268,11 +273,12 @@ class MLWGrammar(Grammar):
SATZZEICHEN = Forward() SATZZEICHEN = Forward()
TEXTELEMENT = Forward() TEXTELEMENT = Forward()
ZAHL = Forward() ZAHL = Forward()
ZWW = Forward()
Zusatz = Forward() Zusatz = Forward()
flexion = Forward() flexion = Forward()
genus = Forward() genus = Forward()
wortart = Forward() wortart = Forward()
source_hash__ = "3e563592ce262f34a151a9f65f997b6b" source_hash__ = "1d6f8c60413469e9350a45b956fcd9fd"
parser_initialization__ = "upon instantiation" parser_initialization__ = "upon instantiation"
COMMENT__ = r'#.*' COMMENT__ = r'#.*'
WHITESPACE__ = r'[\t ]*' WHITESPACE__ = r'[\t ]*'
...@@ -282,6 +288,7 @@ class MLWGrammar(Grammar): ...@@ -282,6 +288,7 @@ class MLWGrammar(Grammar):
DUMMY = Token("EBNF-Grammatik an dieser Stelle noch nicht definiert!") DUMMY = Token("EBNF-Grammatik an dieser Stelle noch nicht definiert!")
NIEMALS = RegExp('(?!.)') NIEMALS = RegExp('(?!.)')
DATEI_ENDE = NegativeLookahead(RegExp('.')) DATEI_ENDE = NegativeLookahead(RegExp('.'))
FORTSETZUNG = NegativeLookahead(Series(ZWW, RegExp('[^:\\n]+[:]')))
KATEGORIENZEILE = RegExp('[^:\\n]+[:][ \\t]*\\n') KATEGORIENZEILE = RegExp('[^:\\n]+[:][ \\t]*\\n')
KOMMENTARZEILEN = ZeroOrMore(Series(RegExp('[ \\t]*\\n?[ \\t]*'), RegExp(COMMENT__))) KOMMENTARZEILEN = ZeroOrMore(Series(RegExp('[ \\t]*\\n?[ \\t]*'), RegExp(COMMENT__)))
ZEILENSPRUNG = RE('[ \\t]*\\n') ZEILENSPRUNG = RE('[ \\t]*\\n')
...@@ -289,27 +296,27 @@ class MLWGrammar(Grammar): ...@@ -289,27 +296,27 @@ class MLWGrammar(Grammar):
LEERZEILE = Series(RegExp('[ \\t]*(?:\\n[ \\t]*)+\\n'), RE('\\n?', wR='', wL=WSP__)) LEERZEILE = Series(RegExp('[ \\t]*(?:\\n[ \\t]*)+\\n'), RE('\\n?', wR='', wL=WSP__))
LEERRAUM = OneOrMore(Alternative(RegExp(COMMENT__), RegExp('\\s+'))) LEERRAUM = OneOrMore(Alternative(RegExp(COMMENT__), RegExp('\\s+')))
LÜCKE = Series(KOMMENTARZEILEN, LEERZEILE, Option(LEERRAUM)) LÜCKE = Series(KOMMENTARZEILEN, LEERZEILE, Option(LEERRAUM))
ZWW = Series(ZEILENSPRUNG, Option(LEERRAUM)) ZWW.set(Series(ZEILENSPRUNG, Option(LEERRAUM)))
ZW = Series(NegativeLookahead(LÜCKE), ZEILENSPRUNG) ZW = Series(NegativeLookahead(LÜCKE), ZEILENSPRUNG)
SEM = RE(';;?') SEM = RE(';;?')
DPP = RE('::?') DPP = RE('::?')
LZ = RegExp('\\s+') LZ = RegExp('\\s+')
ABS = Alternative(RegExp('\\s*;;?\\s*'), OneOrMore(ZWW)) ABS = Alternative(RegExp('\\s*;;?\\s*'), OneOrMore(ZWW))
TR = Alternative(ABS, LZ) 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]+')
ZEICHENFOLGE = RE('[\\w()-]+') ZEICHENFOLGE = RE('[\\w()-]+')
BUCHSTABENFOLGE = RE('\\w+') BUCHSTABENFOLGE = RE('\\w+')
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*)')) 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 = RegExp('[A-ZÄÖÜ]+')
LAT_WORT_TEIL = RegExp('[a-z]+') LAT_WORT = RegExp('[a-z|\\-]+')
LAT_WORT = RE('[a-z]+') DEU_KLEIN = RegExp('[a-zäöüßę\\-]+')
DEU_KLEIN = RE('[a-zäöüßę]+') GROSSBUCHSTABE = RegExp('[A-ZÄÖÜ](?=[ \\t\\n])')
GROSSBUCHSTABE = RE('[A-ZÄÖÜ](?=[ \\t\\n])') DEU_GROSS = RegExp('[A-ZÄÖÜ][a-zäöüßę\\-]+')
DEU_GROSS = RE('[A-ZÄÖÜ][a-zäöüßę]+')
DEU_WORT.set(Alternative(DEU_GROSS, DEU_KLEIN, GROSSBUCHSTABE)) 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ÄÖÜÁÀÂÓÒÔÚÙÛ]\\.')
...@@ -318,10 +325,10 @@ class MLWGrammar(Grammar): ...@@ -318,10 +325,10 @@ class MLWGrammar(Grammar):
Stelle = Synonym(FREITEXT) Stelle = Synonym(FREITEXT)
Werk = Synonym(FREITEXT) Werk = Synonym(FREITEXT)
Autor = Synonym(FREITEXT) Autor = Synonym(FREITEXT)
ZielName = Synonym(BUCHSTABENFOLGE) ZielName = Synonym(EINZEILER)
VerweisZiel = Series(Token("{"), ZielName, Token("}")) VerweisZiel = Series(Token("{"), ZielName, Token("}"))
Verweis = Series(Token("->"), ZielName) Verweis = Series(Token("->"), ZielName, mandatory=1)
BelegText = Series(RE('"', wR='', wL=WSP__), FREITEXT, RE('"'), Option(Token("."))) BelegText = Series(RE('"', wR='', wL=WSP__), FREITEXT, RE('"'), Option(Token(".")), mandatory=2)
BelegQuelle = Series(Autor, DPP, Werk) BelegQuelle = Series(Autor, DPP, Werk)
Zitat = Series(BelegQuelle, ZeroOrMore(Series(SEM, Stelle, BelegText)), Option(Series(Option(TR), Zusatz))) Zitat = Series(BelegQuelle, ZeroOrMore(Series(SEM, Stelle, BelegText)), Option(Series(Option(TR), Zusatz)))
Beleg = Alternative(Verweis, Zitat) Beleg = Alternative(Verweis, Zitat)
...@@ -336,8 +343,11 @@ class MLWGrammar(Grammar): ...@@ -336,8 +343,11 @@ class MLWGrammar(Grammar):
UnterArtikel = Token("UNTER-ARTIKEL") UnterArtikel = Token("UNTER-ARTIKEL")
VerweisPosition = Token("VERWEISE") VerweisPosition = Token("VERWEISE")
Belege = Series(Token("BELEGE"), OneOrMore(Series(ZWW, Token("*"), Beleg)), ABS) Belege = Series(Token("BELEGE"), OneOrMore(Series(ZWW, Token("*"), Beleg)), ABS)
DeutscheBedeutung = Series(DEU, RE('(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+')) BedeutungsQualifikation = Series(Token("["), EINZEILER, ZeroOrMore(Series(SomeOf(SEM, ZW), EINZEILER)), Token("]"), mandatory=3)
LateinischeBedeutung = Series(LAT, RE('(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+')) 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, Option(LZ), mandatory=2)
Bedeutungskategorie = Series(RE('(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+'), Option(LZ)) Bedeutungskategorie = Series(RE('(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+'), Option(LZ))
Bedeutung = Series(Alternative(Interpretamente, Bedeutungskategorie), Option(Belege)) Bedeutung = Series(Alternative(Interpretamente, Bedeutungskategorie), Option(Belege))
...@@ -346,7 +356,7 @@ class MLWGrammar(Grammar): ...@@ -346,7 +356,7 @@ class MLWGrammar(Grammar):
Variante = Series(NegativeLookahead(KATEGORIENZEILE), Gegenstand, DPP, Beleg) Variante = Series(NegativeLookahead(KATEGORIENZEILE), Gegenstand, DPP, Beleg)
Varianten = Series(Variante, ZeroOrMore(Series(ABS, Variante))) Varianten = Series(Variante, ZeroOrMore(Series(ABS, Variante)))
Besonderheit = Synonym(FREITEXT) Besonderheit = Synonym(FREITEXT)
Kategorie.set(Series(Besonderheit, DPP, Option(LZ), Alternative(Varianten, OneOrMore(Kategorie)), Option(LZ), mandatory=1)) Kategorie.set(Series(Besonderheit, DPP, Option(LZ), Alternative(Varianten, OneOrMore(Kategorie)), ZWW, mandatory=1))
Position = Series(Option(LZ), OneOrMore(Kategorie), mandatory=1) Position = Series(Option(LZ), OneOrMore(Kategorie), mandatory=1)
VerwechselungPosition = Series(Token("VERWECHSELBAR"), Position) VerwechselungPosition = Series(Token("VERWECHSELBAR"), Position)
MetrikPosition = Series(Token("METRIK"), Position) MetrikPosition = Series(Token("METRIK"), Position)
...@@ -358,7 +368,7 @@ class MLWGrammar(Grammar): ...@@ -358,7 +368,7 @@ class MLWGrammar(Grammar):
EtymologieBesonderheit = Synonym(FREITEXT) EtymologieBesonderheit = Synonym(FREITEXT)
EtymologieVariante = Alternative(LAT, Series(GRI, Option(EtymologieBesonderheit), Option(Series(Token("ETYM"), Etymologie)), DPP, Beleg)) EtymologieVariante = Alternative(LAT, Series(GRI, Option(EtymologieBesonderheit), Option(Series(Token("ETYM"), Etymologie)), DPP, Beleg))
EtymologiePosition = Series(Token("ETYMOLOGIE"), Option(LZ), OneOrMore(EtymologieVariante)) EtymologiePosition = Series(Token("ETYMOLOGIE"), Option(LZ), OneOrMore(EtymologieVariante))
GrammatikVariante = Series(Option(Series(wortart, ABS)), flexion, Option(genus), DPP, OneOrMore(Beleg)) GrammatikVariante = Series(Option(Series(wortart, ABS)), flexion, Option(genus), DPP, Beleg, ZeroOrMore(Series(FORTSETZUNG, Beleg)))
genus.set(Alternative(Token("maskulinum"), Token("m."), Token("femininum"), Token("f."), Token("neutrum"), Token("n."))) genus.set(Alternative(Token("maskulinum"), Token("m."), Token("femininum"), Token("f."), Token("neutrum"), Token("n.")))
FLEX = RE('-?[a-z]+') FLEX = RE('-?[a-z]+')
konjugation = Synonym(FLEX) konjugation = Synonym(FLEX)
...@@ -367,7 +377,7 @@ class MLWGrammar(Grammar): ...@@ -367,7 +377,7 @@ class MLWGrammar(Grammar):
wortart.set(Alternative(Token("nomen"), Token("n."), Token("verb"), Token("v."), Token("adverb"), Token("adv."), Token("adjektiv"), Token("adj."), Token("praeposition"), Token("praep."))) 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) 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) 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))) LemmaVariante = Synonym(LAT_WORT)
LemmaVarianten = Series(Option(LZ), OneOrMore(Series(LemmaVariante, TR, mandatory=1)), Option(Series(Zusatz, ABS, mandatory=1))) LemmaVarianten = Series(Option(LZ), OneOrMore(Series(LemmaVariante, TR, mandatory=1)), Option(Series(Zusatz, ABS, mandatory=1)))
LemmaWort = Synonym(LAT_WORT) LemmaWort = Synonym(LAT_WORT)
gesichert = Token("$") gesichert = Token("$")
......
line: 137, column: 1, Warning: Rule "SCHLUESSELWORT" is not connected to parser root "Artikel" ! line: 142, 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: 161, 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: 167, 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: 168, 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 "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 "SATZZEICHEN" is not connected to parser root "Artikel" !
line: 185, column: 1, Warning: Rule "ERW_FREITEXT" is not connected to parser root "Artikel" ! line: 187, column: 1, Warning: Rule "BUCHSTABENFOLGE" is not connected to parser root "Artikel" !
line: 197, column: 1, Warning: Rule "ZW" is not connected to parser root "Artikel" ! line: 192, column: 1, Warning: Rule "ERW_FREITEXT" is not connected to parser root "Artikel" !
line: 199, column: 1, Warning: Rule "LÜCKE" is not connected to parser root "Artikel" ! line: 206, column: 1, Warning: Rule "RZS" is not connected to parser root "Artikel" !
line: 201, column: 1, Warning: Rule "LEERZEILE" is not connected to parser root "Artikel" ! line: 214, column: 1, Warning: Rule "NIEMALS" is not connected to parser root "Artikel" !
line: 202, column: 1, Warning: Rule "RZS" is not connected to parser root "Artikel" ! line: 216, column: 1, Warning: Rule "DUMMY" 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" !
...@@ -6,6 +6,13 @@ ...@@ -6,6 +6,13 @@
fezdregl(a): -> Verweis_005 fezdregl(a): -> Verweis_005
""" """
2: """SCHREIBWEISE
script.:
vizreg-: -> ID_0023
festregel(a): -> v. ibi
fezdregl(a): -> v. ibi
"""
[match:Besonderheit] [match:Besonderheit]
1: """script.""" 1: """script."""
2: """script. fat-""" 2: """script. fat-"""
......
...@@ -25,7 +25,8 @@ M1: """LAT pannus, faciale, sudarium""" ...@@ -25,7 +25,8 @@ M1: """LAT pannus, faciale, sudarium"""
M2: """LAT capital, rica""" M2: """LAT capital, rica"""
[match:DeutscheBedeutung] [match:DeutscheBedeutung]
M1: """DEU Gesichts-, Schweißtuch [usu liturg.; de re v. p. 32, 63]""" M1: """DEU Gesichts-,
Schweißtuch [usu liturg.; de re v. p. 32, 63]"""
M2: """DEU Kopftuch""" M2: """DEU Kopftuch"""
[match:Belege] [match:Belege]
......
...@@ -14,9 +14,7 @@ Match-test "1" ...@@ -14,9 +14,7 @@ Match-test "1"
(Lemma (Lemma
(LemmaWort (LemmaWort
(LAT_WORT (LAT_WORT
(:RegExp "facitergula"
"facitergula"
)
) )
) )
) )
...@@ -51,7 +49,7 @@ Match-test "1" ...@@ -51,7 +49,7 @@ Match-test "1"
) )
(:OneOrMore (:OneOrMore