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

Commit 03a8057e authored by di68kap's avatar di68kap
Browse files

- MLW - additions: endless loop in AST-Transformation, please DEBUG!!!

parent 55bb62f2
......@@ -138,7 +138,7 @@ nil_scanner = lambda text: text
def line_col(text, pos):
"""Returns the position within a text as (line, column)-tuple.
"""
assert pos < len(text)
assert pos < len(text), str(pos) + " >= " + str(len(text))
line = text.count("\n", 0, pos) + 1
column = pos - text.rfind("\n", 0, pos)
return line, column
......@@ -218,7 +218,7 @@ class Node:
self._errors = []
self.error_flag = any(r.error_flag for r in self.result) if self.children else False
self._len = len(self.result) if not self.children else \
sum(child._len for child in self.result)
sum(child._len for child in self.children)
self.pos = 0
def __str__(self):
......@@ -248,6 +248,7 @@ class Node:
@property
def len(self):
# DEBUGGING: print(str(self.parser), str(self.pos), str(self._len), str(self)[:10].replace('\n','.'))
return self._len
@property
......@@ -863,11 +864,15 @@ class GrammarBase:
else " too often! Terminating parser.")
stitches.append(Node(None, skip))
stitches[-1].add_error(error_msg)
if stitches:
# if stitches:
# if result and stitches[-1] != result:
# stitches.append(result)
# if rest:
# stitches.append(Node(None, rest))
if stitches and rest:
if result and stitches[-1] != result:
stitches.append(result)
if rest:
stitches.append(Node(None, rest))
stitches.append(Node(None, rest))
return result if not stitches else Node(None, tuple(stitches))
......
......@@ -18,7 +18,7 @@ Lemma = [_tll] WORT_KLEIN [LEER]
_tll = "*"
LemmaVarianten = "VARIANTEN" [LEER] §LVariante { TRENNER LVariante }
[TRENNER LVZusatz] [LEER]
[TRENNER LVZusatz] [TRENNER]
LVariante = ~/(?:[a-z]|-)+/~ # Buchstabenfolge mit Trennzeichen "-"
LVZusatz = "ZUSATZ" "sim."
......@@ -26,7 +26,8 @@ LVZusatz = "ZUSATZ" "sim."
#### GRAMMATIK-POSITION ######################################################
GrammatikPosition = "GRAMMATIK" §_wortart §";" §Flexionen [_genus] {GrammatikVarianten} [";" | "."]
GrammatikPosition = "GRAMMATIK" [LEER] §_wortart §TRENNER §Flexionen [_genus]
{GrammatikVarianten} [TRENNER]
_wortart = "nomen" | "n." |
"verb" | "v." |
......@@ -34,7 +35,7 @@ _wortart = "nomen" | "n." |
"adjektiv" | "adj."
GrammatikVarianten = ";" §GVariante
GrammatikVarianten = TRENNER GVariante
GVariante = Flexionen [_genus] ":" Beleg
Flexionen = Flexion { "," §Flexion }
......@@ -49,29 +50,30 @@ _genus = "maskulinum" | "m." |
#### ARTIKEL-KOPF ############################################################
ArtikelKopf = SchreibweisenPosition
SchreibweisenPosition = "SCHREIBWEISE" §SWTyp ":" §SWVariante { "," §SWVariante}
SchreibweisenPosition = "SCHREIBWEISE" [LEER] §SWTyp ":" [LEER]
§SWVariante { TRENNER SWVariante} [LEER]
SWTyp = "script." | "script. fat-"
SWVariante = Schreibweise ":" Beleg
Schreibweise = "vizreg-" | "festregel(a)" | "fezdregl(a)" | "fat-"
Beleg = Verweis
Verweis = ~/>>\w+/~
Verweis = ~/\w+/~
VerweisZiel = ~/<\w+>/~
#### BEDEUTUNGS-POSITION #####################################################
BedeutungsPosition = { "BEDEUTUNG" Bedeutung }+
BedeutungsPosition = { "BEDEUTUNG" [LEER] §Bedeutung [LEER] }+
Bedeutung = (Interpretamente | Bedeutungskategorie) [Belege]
Bedeutungskategorie = /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~
Interpretamente = LateinischeBedeutung DeutscheBedeutung
Bedeutungskategorie = /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~ [LEER]
Interpretamente = LateinischeBedeutung [LEER] §DeutscheBedeutung [LEER]
LateinischeBedeutung = "LAT" /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~
DeutscheBedeutung = "DEU" /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~
Belege = "BELEGE" { "*" EinBeleg }
EinBeleg = { !(/\s*/ ("*" | "BEDEUTUNG" | "AUTOR" | "NAME" | "ZUSATZ")) /\s?.*/ }+
[Zusatz]
Zusatz = "ZUSATZ" /\s?.*/
Belege = "BELEGE" [LEER] { "*" EinBeleg }
EinBeleg = { !(/\s*/ ("*" | "BEDEUTUNG" | "AUTOR" | "NAME" | "ZUSATZ")) /\s*.*\s*/ }+
[Zusatz] [LEER]
Zusatz = "ZUSATZ" /\s*.*/
#### AUTOR/AUTORIN ###########################################################
......
......@@ -59,7 +59,7 @@ class MLWGrammar(GrammarBase):
_tll = "*"
LemmaVarianten = "VARIANTEN" [LEER] §LVariante { TRENNER LVariante }
[TRENNER LVZusatz] [LEER]
[TRENNER LVZusatz] [TRENNER]
LVariante = ~/(?:[a-z]|-)+/~ # Buchstabenfolge mit Trennzeichen "-"
LVZusatz = "ZUSATZ" "sim."
......@@ -67,7 +67,8 @@ class MLWGrammar(GrammarBase):
#### GRAMMATIK-POSITION ######################################################
GrammatikPosition = "GRAMMATIK" §_wortart §";" §Flexionen [_genus] {GrammatikVarianten} [";" | "."]
GrammatikPosition = "GRAMMATIK" [LEER] §_wortart §TRENNER §Flexionen [_genus]
{GrammatikVarianten} [TRENNER]
_wortart = "nomen" | "n." |
"verb" | "v." |
......@@ -75,7 +76,7 @@ class MLWGrammar(GrammarBase):
"adjektiv" | "adj."
GrammatikVarianten = ";" §GVariante
GrammatikVarianten = TRENNER GVariante
GVariante = Flexionen [_genus] ":" Beleg
Flexionen = Flexion { "," §Flexion }
......@@ -90,29 +91,30 @@ class MLWGrammar(GrammarBase):
#### ARTIKEL-KOPF ############################################################
ArtikelKopf = SchreibweisenPosition
SchreibweisenPosition = "SCHREIBWEISE" §SWTyp ":" §SWVariante { "," §SWVariante}
SchreibweisenPosition = "SCHREIBWEISE" [LEER] §SWTyp ":" [LEER]
§SWVariante { TRENNER SWVariante} [LEER]
SWTyp = "script." | "script. fat-"
SWVariante = Schreibweise ":" Beleg
Schreibweise = "vizreg-" | "festregel(a)" | "fezdregl(a)" | "fat-"
Beleg = Verweis
Verweis = ~/>>\w+/~
Verweis = ~/\w+/~
VerweisZiel = ~/<\w+>/~
#### BEDEUTUNGS-POSITION #####################################################
BedeutungsPosition = { "BEDEUTUNG" Bedeutung }+
BedeutungsPosition = { "BEDEUTUNG" [LEER] §Bedeutung [LEER] }+
Bedeutung = (Interpretamente | Bedeutungskategorie) [Belege]
Bedeutungskategorie = /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~
Interpretamente = LateinischeBedeutung DeutscheBedeutung
Bedeutungskategorie = /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~ [LEER]
Interpretamente = LateinischeBedeutung [LEER] §DeutscheBedeutung [LEER]
LateinischeBedeutung = "LAT" /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~
DeutscheBedeutung = "DEU" /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~
Belege = "BELEGE" { "*" EinBeleg }
EinBeleg = { !(/\s*/ ("*" | "BEDEUTUNG" | "AUTOR" | "NAME" | "ZUSATZ")) /\s?.*/ }+
[Zusatz]
Zusatz = "ZUSATZ" /\s?.*/
Belege = "BELEGE" [LEER] { "*" EinBeleg }
EinBeleg = { !(/\s*/ ("*" | "BEDEUTUNG" | "AUTOR" | "NAME" | "ZUSATZ")) /\s*.*\s*/ }+
[Zusatz] [LEER]
Zusatz = "ZUSATZ" /\s*.*/
#### AUTOR/AUTORIN ###########################################################
......@@ -136,7 +138,7 @@ class MLWGrammar(GrammarBase):
DATEI_ENDE = !/./
NIEMALS = /(?!.)/
"""
source_hash__ = "80f86a639074d1c7dac188925032c7d0"
source_hash__ = "ab1cb5e0828e27aa217345f61803efd1"
parser_initialization__ = "upon instatiation"
wsp__ = mixin_comment(whitespace=r'[\t\r\ ]*', comment=r'#.*(?:\n|$)')
wspL__ = wsp__
......@@ -153,33 +155,33 @@ class MLWGrammar(GrammarBase):
WORT = RE('[A-ZÄÖÜ]?[a-zäöüß]+', wL='')
Name = Sequence(WORT, ZeroOrMore(Alternative(WORT, RE('[A-ZÄÖÜÁÀ]\\.', wR='', wL=''))))
Autorinfo = Sequence(Alternative(Token("AUTORIN"), Token("AUTOR")), Name)
Zusatz = Sequence(Token("ZUSATZ"), RE('\\s?.*', wR='', wL=''))
EinBeleg = Sequence(OneOrMore(Sequence(NegativeLookahead(Sequence(RE('\\s*', wR='', wL=''), Alternative(Token("*"), Token("BEDEUTUNG"), Token("AUTOR"), Token("NAME"), Token("ZUSATZ")))), RE('\\s?.*', wR='', wL=''))), Optional(Zusatz))
Belege = Sequence(Token("BELEGE"), ZeroOrMore(Sequence(Token("*"), EinBeleg)))
Zusatz = Sequence(Token("ZUSATZ"), RE('\\s*.*', wR='', wL=''))
EinBeleg = Sequence(OneOrMore(Sequence(NegativeLookahead(Sequence(RE('\\s*', wR='', wL=''), Alternative(Token("*"), Token("BEDEUTUNG"), Token("AUTOR"), Token("NAME"), Token("ZUSATZ")))), RE('\\s*.*\\s*', wR='', wL=''))), Optional(Zusatz), Optional(LEER))
Belege = Sequence(Token("BELEGE"), Optional(LEER), ZeroOrMore(Sequence(Token("*"), EinBeleg)))
DeutscheBedeutung = Sequence(Token("DEU"), RE('(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+', wL=''))
LateinischeBedeutung = Sequence(Token("LAT"), RE('(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+', wL=''))
Interpretamente = Sequence(LateinischeBedeutung, DeutscheBedeutung)
Bedeutungskategorie = RE('(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+', wL='')
Interpretamente = Sequence(LateinischeBedeutung, Optional(LEER), Required(DeutscheBedeutung), Optional(LEER))
Bedeutungskategorie = Sequence(RE('(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+', wL=''), Optional(LEER))
Bedeutung = Sequence(Alternative(Interpretamente, Bedeutungskategorie), Optional(Belege))
BedeutungsPosition = OneOrMore(Sequence(Token("BEDEUTUNG"), Bedeutung))
BedeutungsPosition = OneOrMore(Sequence(Token("BEDEUTUNG"), Optional(LEER), Required(Bedeutung), Optional(LEER)))
VerweisZiel = RE('<\\w+>')
Verweis = RE('>>\\w+')
Verweis = RE('\\w+')
Beleg = Verweis
Schreibweise = Alternative(Token("vizreg-"), Token("festregel(a)"), Token("fezdregl(a)"), Token("fat-"))
SWVariante = Sequence(Schreibweise, Token(":"), Beleg)
SWTyp = Alternative(Token("script."), Token("script. fat-"))
SchreibweisenPosition = Sequence(Token("SCHREIBWEISE"), Required(SWTyp), Token(":"), Required(SWVariante), ZeroOrMore(Sequence(Token(","), Required(SWVariante))))
SchreibweisenPosition = Sequence(Token("SCHREIBWEISE"), Optional(LEER), Required(SWTyp), Token(":"), Optional(LEER), Required(SWVariante), ZeroOrMore(Sequence(TRENNER, SWVariante)), Optional(LEER))
ArtikelKopf = SchreibweisenPosition
_genus = Alternative(Token("maskulinum"), Token("m."), Token("femininum"), Token("f."), Token("neutrum"), Token("n."))
Flexion = RE('-?[a-z]+', wL='')
Flexionen = Sequence(Flexion, ZeroOrMore(Sequence(Token(","), Required(Flexion))))
GVariante = Sequence(Flexionen, Optional(_genus), Token(":"), Beleg)
GrammatikVarianten = Sequence(Token(";"), Required(GVariante))
GrammatikVarianten = Sequence(TRENNER, GVariante)
_wortart = Alternative(Token("nomen"), Token("n."), Token("verb"), Token("v."), Token("adverb"), Token("adv."), Token("adjektiv"), Token("adj."))
GrammatikPosition = Sequence(Token("GRAMMATIK"), Required(_wortart), Required(Token(";")), Required(Flexionen), Optional(_genus), ZeroOrMore(GrammatikVarianten), Optional(Alternative(Token(";"), Token("."))))
GrammatikPosition = Sequence(Token("GRAMMATIK"), Optional(LEER), Required(_wortart), Required(TRENNER), Required(Flexionen), Optional(_genus), ZeroOrMore(GrammatikVarianten), Optional(TRENNER))
LVZusatz = Sequence(Token("ZUSATZ"), Token("sim."))
LVariante = RE('(?:[a-z]|-)+')
LemmaVarianten = Sequence(Token("VARIANTEN"), Optional(LEER), Required(LVariante), ZeroOrMore(Sequence(TRENNER, LVariante)), Optional(Sequence(TRENNER, LVZusatz)), Optional(LEER))
LemmaVarianten = Sequence(Token("VARIANTEN"), Optional(LEER), Required(LVariante), ZeroOrMore(Sequence(TRENNER, LVariante)), Optional(Sequence(TRENNER, LVZusatz)), Optional(TRENNER))
_tll = Token("*")
Lemma = Sequence(Optional(_tll), WORT_KLEIN, Optional(LEER))
LemmaPosition = Sequence(Token("LEMMA"), Required(Lemma), Optional(LemmaVarianten), Required(GrammatikPosition))
......
......@@ -4,7 +4,7 @@ VARIANTEN
fasc-itergula
fac-iet-ergula
fac-ist-ergula
fa-rcu-tergula;
fa-rcu-tergula
ZUSATZ sim.
......@@ -12,15 +12,15 @@ VARIANTEN
GRAMMATIK
nomen; -ar f.;
-us, -i m.: >>beleg_id_1;
-um, -i n.: >>beleg_id_2
-us, -i m.: beleg_id_1
-um, -i n.: beleg_id_2
SCHREIBWEISE
script.:
vizreg-: >>beleg_id_3,
festregel(a): >>beleg_id_4,
fezdregl(a): >>beleg_id5
vizreg-: beleg_id_3
festregel(a): beleg_id_4
fezdregl(a): beleg_id5
BEDEUTUNG
......
......@@ -7,28 +7,119 @@
<WORT_KLEIN>
facitergula
</WORT_KLEIN>
<LEER>
<RegExp>
</RegExp>
</LEER>
</Lemma>
<LemmaVarianten>
<LEER>
<RegExp>
</RegExp>
</LEER>
<LVariante>
fasc-itergula
</LVariante>
<TRENNER>
<ZSPRUNG>
<RegExp>
</RegExp>
</ZSPRUNG>
</TRENNER>
<LVariante>
fac-iet-ergula
</LVariante>
<TRENNER>
<ZSPRUNG>
<RegExp>
</RegExp>
</ZSPRUNG>
</TRENNER>
<LVariante>
fac-ist-ergula
</LVariante>
<TRENNER>
<ZSPRUNG>
<RegExp>
</RegExp>
</ZSPRUNG>
</TRENNER>
<LVariante>
fa-rcu-tergula
</LVariante>
<TRENNER>
<OneOrMore>
<ZSPRUNG>
<RegExp>
</RegExp>
</ZSPRUNG>
<ZSPRUNG>
<RegExp>
</RegExp>
</ZSPRUNG>
</OneOrMore>
</TRENNER>
<LVZusatz>
sim.
<token__>
ZUSATZ
</token__>
<token__>
sim.
</token__>
</LVZusatz>
<TRENNER>
<OneOrMore>
<ZSPRUNG>
<RegExp>
</RegExp>
</ZSPRUNG>
<ZSPRUNG>
<RegExp>
</RegExp>
</ZSPRUNG>
<ZSPRUNG>
<RegExp>
</RegExp>
</ZSPRUNG>
</OneOrMore>
</TRENNER>
</LemmaVarianten>
<GrammatikPosition>
<LEER>
<RegExp>
</RegExp>
</LEER>
<_wortart>
nomen
</_wortart>
<TRENNER>
<RegExp>
;
</RegExp>
</TRENNER>
<Flexionen>
<Flexion>
-ar
......@@ -37,125 +128,270 @@
<_genus>
f.
</_genus>
<GVariante>
<Flexionen>
<Flexion>
-us
</Flexion>
<Flexion>
-i
</Flexion>
</Flexionen>
<_genus>
m.
</_genus>
<Verweis>
>>beleg_id_1
</Verweis>
</GVariante>
<GVariante>
<Flexionen>
<Flexion>
-um
</Flexion>
<Flexion>
-i
</Flexion>
</Flexionen>
<_genus>
n.
</_genus>
<Verweis>
>>beleg_id_2
</Verweis>
</GVariante>
<GrammatikVarianten>
<TRENNER>
<RegExp>
;
</RegExp>
</TRENNER>
<GVariante>
<Flexionen>
<Flexion>
-us
</Flexion>
<Flexion>
-i
</Flexion>
</Flexionen>
<_genus>
m.
</_genus>
<Verweis>
beleg_id_1
</Verweis>
</GVariante>
</GrammatikVarianten>
<GrammatikVarianten>
<TRENNER>
<ZSPRUNG>
<RegExp>
</RegExp>
</ZSPRUNG>
</TRENNER>
<GVariante>
<Flexionen>
<Flexion>
-um
</Flexion>
<Flexion>
-i
</Flexion>
</Flexionen>
<_genus>
n.
</_genus>
<Verweis>
beleg_id_2
</Verweis>
</GVariante>
</GrammatikVarianten>
<TRENNER>
<OneOrMore>
<ZSPRUNG>
<RegExp>
</RegExp>
</ZSPRUNG>
<ZSPRUNG>
<RegExp>
</RegExp>
</ZSPRUNG>
<ZSPRUNG>
<RegExp>
</RegExp>
</ZSPRUNG>
</OneOrMore>
</TRENNER>
</GrammatikPosition>
</LemmaPosition>
<SchreibweisenPosition>
<LEER>
<RegExp>
</RegExp>
</LEER>
<SWTyp>
<token__>
script.
</token__>
</SWTyp>
<LEER>
<RegExp>
</RegExp>
</LEER>
<SWVariante>
<Schreibweise>
vizreg-
</Schreibweise>
<Verweis>
>>beleg_id_3
beleg_id_3
</Verweis>
</SWVariante>
<TRENNER>
<ZSPRUNG>
<RegExp>
</RegExp>
</ZSPRUNG>
</TRENNER>
<SWVariante>
<Schreibweise>
festregel(a)
</Schreibweise>
<Verweis>
>>beleg_id_4
beleg_id_4
</Verweis>
</SWVariante>
<TRENNER>
<ZSPRUNG>
<RegExp>
</RegExp>
</ZSPRUNG>
</TRENNER>
<SWVariante>
<Schreibweise>
fezdregl(a)
</Schreibweise>
<Verweis>
>>beleg_id5
beleg_id5
</Verweis>
</SWVariante>
<LEER>
<RegExp>
</RegExp>
</LEER>
</SchreibweisenPosition>
<BedeutungsPosition>
<LEER>
<RegExp>
</RegExp>
</LEER>
<Bedeutung>
<Interpretamente>
<LateinischeBedeutung>
pannus, faciale, sudarium
</LateinischeBedeutung>
<LEER>
<RegExp>
</RegExp>
</LEER>
<DeutscheBedeutung>
Gesichts-, Schweißtuch [usu liturg.; de re v. p. 32, 63]
</DeutscheBedeutung>
<LEER>
<RegExp>
</RegExp>
</LEER>
</Interpretamente>
<Belege>
<LEER>
<RegExp>
</RegExp>
</LEER>
<EinBeleg>
Catal. thes. Germ. 28,11 (post 851) -um III.
</EinBeleg>
<EinBeleg>
Form. Sangall. 39 p. 421,16 "munuscula ... direximus, hoc est palliolum ... ,
-as duas."
-as duas."
</EinBeleg>
<EinBeleg>
Catal. thes. Germ. 18,7 "-eterculi viginti quatuor".
</EinBeleg>
<EinBeleg>
Libri confrat. I app. A 6 p. 137,30 "pulpitum ... -a cocco imaginata
circumdari iussit pontifex."
circumdari iussit pontifex."
</EinBeleg>
<EinBeleg>
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.