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

Commit fda0f022 authored by di68kap's avatar di68kap
Browse files

- MLW example: AST Transformation finished.

parent abb84c1c
......@@ -140,7 +140,7 @@ class ZOMBIE_PARSER:
class Node:
def __init__(self, parser, result):
# self.children = False # will be set by the following assignment
self.children = () # will be set by the following assignment
self.result = result # sets self.children to `True` if there are any
self.parser = parser or ZOMBIE_PARSER
self.errors = []
......@@ -247,6 +247,7 @@ class Node:
else "'%s'" % s if s.find("'") < 0 \
else '"%s"' % s.replace('"', r'\"')
return self.as_tree(' ', opening, lambda node: ')', pretty)
def as_xml(self, src=None):
"""Returns content as XML-tree.
......@@ -1130,6 +1131,7 @@ remove_expendables = partial(remove_children_if, condition=is_expendable)
def flatten(node):
# TODO: ensure error messages are preserved!!!
"""Recursively flattens all unnamed sub-nodes, in case there is more
than one sub-node present. Flattening means that
wherever a node has child nodes, the child nodes are inserted in place
......@@ -1138,11 +1140,11 @@ def flatten(node):
This is meant to achieve the following structural transformation:
X (+ Y + Z) -> X + Y + Z
"""
if len(node.children) >= 2:
if len(node.children) >= 1:
new_result = []
for child in node.result:
if not child.parser.name:
assert isinstance(child.result, tuple), node.as_sexpr()
if not child.parser.name and child.children:
assert child.children, node.as_sexpr()
flatten(child)
new_result.extend(child.result)
else:
......@@ -1151,6 +1153,7 @@ def flatten(node):
def remove_tokens(node, tokens={}):
# TODO: ensure error messages are preserved!!!
"""Reomoves any among a particular set of tokens from the immediate
descendants of a node.
"""
......@@ -1165,6 +1168,7 @@ def remove_tokens(node, tokens={}):
def remove_enclosing_delimiters(node):
# TODO: ensure error messages are preserved!!!
"""Removes the enclosing delimiters from a structure (e.g. quotation marks
from a literal or braces from a group).
"""
......
......@@ -62,9 +62,9 @@ VerweisZiel = ~/<\w+>/~
BedeutungsPosition = { "BEDEUTUNG" Bedeutung }+
Bedeutung = Interpretamente | Bedeutungskategorie
Bedeutung = (Interpretamente | Bedeutungskategorie) [Belege]
Bedeutungskategorie = /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~
Interpretamente = LateinischeBedeutung DeutscheBedeutung [Belege]
Interpretamente = LateinischeBedeutung DeutscheBedeutung
LateinischeBedeutung = "LAT" /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~
DeutscheBedeutung = "DEU" /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~
Belege = "BELEGE" { "*" EinBeleg }
......
......@@ -71,9 +71,9 @@ class MLWGrammar(ParserHeadquarter):
BedeutungsPosition = { "BEDEUTUNG" Bedeutung }+
Bedeutung = Interpretamente | Bedeutungskategorie
Bedeutung = (Interpretamente | Bedeutungskategorie) [Belege]
Bedeutungskategorie = /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~
Interpretamente = LateinischeBedeutung DeutscheBedeutung [Belege]
Interpretamente = LateinischeBedeutung DeutscheBedeutung
LateinischeBedeutung = "LAT" /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~
DeutscheBedeutung = "DEU" /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~
Belege = "BELEGE" { "*" EinBeleg }
......@@ -100,7 +100,7 @@ class MLWGrammar(ParserHeadquarter):
DATEI_ENDE = !/./
NIEMALS = /(?!.)/
"""
source_hash__ = "2c3456ee74172407cbe1f15e3649b41f"
source_hash__ = "ca55553a5e483fa08341abecc2aa284c"
parser_initialization__ = "upon instatiation"
wsp__ = mixin_comment(whitespace=r'\s*', comment=r'#.*(?:\n|$)')
wspL__ = wsp__
......@@ -120,9 +120,9 @@ class MLWGrammar(ParserHeadquarter):
Belege = Sequence(Token("BELEGE"), ZeroOrMore(Sequence(Token("*"), EinBeleg)))
DeutscheBedeutung = Sequence(Token("DEU"), RE('(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+', wR=wsp__))
LateinischeBedeutung = Sequence(Token("LAT"), RE('(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+', wR=wsp__))
Interpretamente = Sequence(LateinischeBedeutung, DeutscheBedeutung, Optional(Belege))
Interpretamente = Sequence(LateinischeBedeutung, DeutscheBedeutung)
Bedeutungskategorie = RE('(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+', wR=wsp__)
Bedeutung = Alternative(Interpretamente, Bedeutungskategorie)
Bedeutung = Sequence(Alternative(Interpretamente, Bedeutungskategorie), Optional(Belege))
BedeutungsPosition = OneOrMore(Sequence(Token("BEDEUTUNG"), Bedeutung))
VerweisZiel = RE('<\\w+>', wR=wsp__, wL=wsp__)
Verweis = RE('>>\\w+', wR=wsp__, wL=wsp__)
......@@ -197,12 +197,15 @@ MLWTransTable = {
[flatten, partial(remove_tokens, tokens={',', ';'})],
"Flexion, Verweis":
[remove_expendables, reduce_single_child],
"Zusatz":
[remove_expendables, remove_tokens, reduce_single_child],
"ArtikelKopf": no_transformation,
"SchreibweisenPosition":
[partial(remove_tokens, tokens={'SCHREIBWEISE', ':'}),
flatten, partial(remove_tokens, tokens={','})],
"SWTyp": no_transformation,
"BedeutungsPosition": no_transformation,
"BedeutungsPosition":
[flatten, partial(remove_tokens, tokens={'BEDEUTUNG'})],
"Bedeutung": no_transformation,
"Bedeutungskategorie": no_transformation,
"Interpretamente": no_transformation,
......@@ -211,9 +214,11 @@ MLWTransTable = {
"Belege":
[flatten, remove_tokens],
"EinBeleg":
[flatten], # remove_expendables], # join_strings],
[flatten, remove_expendables, join_strings, reduce_single_child],
"Beleg": no_transformation,
"VerweisZiel": no_transformation,
"Autorinfo":
[partial(remove_tokens, tokens={'AUTORIN', 'AUTOR'})],
"WORT, WORT_KLEIN, WORT_GROSS, GROSSSCHRIFT":
# test,
[remove_expendables, reduce_single_child],
......
......@@ -103,111 +103,59 @@
</SWVariante>
</SchreibweisenPosition>
<BedeutungsPosition>
<Sequence>
<token__>
BEDEUTUNG
</token__>
<Bedeutung>
<Interpretamente>
<LateinischeBedeutung>
pannus, faciale, sudarium
</LateinischeBedeutung>
<DeutscheBedeutung>
Gesichts-, Schweißtuch [usu liturg.; de re v. p. 32, 63]
</DeutscheBedeutung>
<Belege>
<EinBeleg>
<RegExp>
Catal. thes. Germ. 28,11 (post 851) -um III.
</RegExp>
</EinBeleg>
<EinBeleg>
<OneOrMore>
<RegExp>
Form. Sangall. 39 p. 421,16 "munuscula ... direximus, hoc est palliolum ... ,
</RegExp>
<RegExp>
-as duas."
</RegExp>
</OneOrMore>
</EinBeleg>
<EinBeleg>
<RegExp>
Catal. thes. Germ. 18,7 "-eterculi viginti quatuor".
</RegExp>
</EinBeleg>
<EinBeleg>
<OneOrMore>
<RegExp>
Libri confrat. I app. A 6 p. 137,30 "pulpitum ... -a cocco imaginata
</RegExp>
<RegExp>
circumdari iussit pontifex."
</RegExp>
</OneOrMore>
</EinBeleg>
<EinBeleg>
<OneOrMore>
<RegExp>
Catal. thes. Germ. 76,15 -rulae II. 40,5 VI vizregule. 129a,5 -sterculas
</RegExp>
<RegExp>
II. 24,8 -itella X. 114,8 VIII fezdregle. 6,24 fasciutercule
</RegExp>
<RegExp>
VII. 92,6 fascercule tres. 21,20 IIII festregele.
</RegExp>
</OneOrMore>
<Zusatz>
<token__>
ZUSATZ
</token__>
<RegExp>
saepe.
</RegExp>
</Zusatz>
</EinBeleg>
</Belege>
</Interpretamente>
</Bedeutung>
</Sequence>
<Sequence>
<token__>
BEDEUTUNG
</token__>
<Bedeutung>
<Interpretamente>
<LateinischeBedeutung>
capital, rica
</LateinischeBedeutung>
<DeutscheBedeutung>
Kopftuch
</DeutscheBedeutung>
<Belege>
<EinBeleg>
<RegExp>
Transl. Libor. I 32 raptis feminarum -is (fa[s]citergiis var. l.).
</RegExp>
</EinBeleg>
<EinBeleg>
<OneOrMore>
<RegExp>
II 20 nuditatem membrorum illius (puellae) tegere festinarunt fideles
</RegExp>
<RegExp>
clerici et laici inprimis cum eorum -cula, dein vestibus solitis.
</RegExp>
</OneOrMore>
</EinBeleg>
</Belege>
</Interpretamente>
</Bedeutung>
</Sequence>
<Bedeutung>
<Interpretamente>
<LateinischeBedeutung>
pannus, faciale, sudarium
</LateinischeBedeutung>
<DeutscheBedeutung>
Gesichts-, Schweißtuch [usu liturg.; de re v. p. 32, 63]
</DeutscheBedeutung>
</Interpretamente>
<Belege>
<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."
</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."
</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.
saepe.
</EinBeleg>
</Belege>
</Bedeutung>
<Bedeutung>
<Interpretamente>
<LateinischeBedeutung>
capital, rica
</LateinischeBedeutung>
<DeutscheBedeutung>
Kopftuch
</DeutscheBedeutung>
</Interpretamente>
<Belege>
<EinBeleg>
Transl. Libor. I 32 raptis feminarum -is (fa[s]citergiis var. l.).
</EinBeleg>
<EinBeleg>
II 20 nuditatem membrorum illius (puellae) tegere festinarunt fideles
clerici et laici inprimis cum eorum -cula, dein vestibus solitis.
</EinBeleg>
</Belege>
</Bedeutung>
</BedeutungsPosition>
<Autorinfo>
<token__>
AUTORIN
</token__>
<Name>
Weber
</Name>
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment