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

Commit b00c3789 authored by di68kap's avatar di68kap
Browse files

- MLW Erweiterungen

parent a5dfe5b5
......@@ -32,14 +32,9 @@ LATEINISCH iussum, praeceptum, mandatum
DEUTSCH Befehl, Anweisung, Auftrag
UNTERBEDEUTUNG1
LATEINISCH proprie
UNTERBEDEUTUNG2
U1_BEDEUTUNG proprie:
LATEINISCH in univ.
U2_BEDEUTUNG in univ.:
BELEGE
* Leg.: Burgund. Rom. 38,1 si quis ... nullo metu aut imperio ad pacta venire conpellitur, sed libera voluntate pactum inisse cognuscitur eqs.
......@@ -47,8 +42,7 @@ BELEGE
* Lex: Baiuv. 1,10 hoc (sc. lex) per inperium regis vel iudicis fiat.
* Arbeo: Emm. 16 p. 49,17 ex imperio principis ... in ospiti sui scuriam ... deductus est episcopus. persaepe. v. et p. 1407, 57.
UNTERBEDEUTUNG2
U2_BEDEUTUNG
LATEINISCH voluntas, arbitrium
DEUTSCH Wille, (willkürlicher) Beschluss
......@@ -57,7 +51,7 @@ BELEGE
* Vita: Euch. Val. Mat. 22 quamvis esset Maternus magnae vir auctoritatis ..., nihil tamen ex proprio imperio quasi libera utens potestate exercuit.
UNTERBEDEUTUNG1
U1_BEDEUTUNG
LATEINISCH in imag. vel translate
......@@ -71,12 +65,12 @@ LATEINISCH potestas, dominatio, dicio
DEUTSCH Macht, Herrschaft(sgewalt; plur. sensu sing. : v. ibi. al.)
UNTERBEDEUTUNG1
UNTER_BEDEUTUNG
LATEINISCH proprie
UNTERBEDEUTUNG2
UNTER_UNTER_BEDEUTUNG
LATEINISCH in univ.
......
......@@ -99,10 +99,16 @@ Gegenstand = EINZEILER
#### BEDEUTUNGS-POSITION #####################################################
BedeutungsPosition = { ZWW "BEDEUTUNG" [LZ] §Bedeutung }+
BedeutungsPosition = { ZWW "BEDEUTUNG" [LZ] §Bedeutung [U1Bedeutung] }+
U1Bedeutung = { ZWW "U1_BEDEUTUNG" [LZ] §Bedeutung [U2Bedeutung] }+
U2Bedeutung = { ZWW "U2_BEDEUTUNG" [LZ] §Bedeutung [U3Bedeutung] }+
U3Bedeutung = { ZWW "U3_BEDEUTUNG" [LZ] §Bedeutung [U4Bedeutung] }+
U4Bedeutung = { ZWW "U4_BEDEUTUNG" [LZ] §Bedeutung [U5Bedeutung] }+
U5Bedeutung = { ZWW "U5_BEDEUTUNG" [LZ] §UntersteBedeutung }+
Bedeutung = (Interpretamente | Bedeutungskategorie) [BelegPosition]
Bedeutungskategorie = /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~ [LZ]
UntersteBedeutung = Interpretamente [BelegPosition]
Bedeutungskategorie = EINZEILER §":" [LZ]
Interpretamente = LateinischeBedeutung [LZ] §DeutscheBedeutung
LateinischeBedeutung = LAT [LZ] LateinischerAusdruck { <","|ZW> LateinischerAusdruck }
DeutscheBedeutung = DEU [LZ] DeutscherAusdruck { <","|ZW> DeutscherAusdruck }
......@@ -178,6 +184,7 @@ DEU_WORT = DEU_GROSS | DEU_KLEIN | GROSSBUCHSTABE
DEU_GROSS = /[A-ZÄÖÜ][a-zäöüßę_\-]+/~
GROSSBUCHSTABE = /[A-ZÄÖÜ](?=[ \t\n])/~
KLEINBUCHSTABE = /[a-zäöü](?=[ \t\n])/~
GRI_BUCHSTABE = /[αβγδεζηθικλμνξοπρςστυφχψω]/
DEU_KLEIN = /(?!-)[a-zäöüßę_\-]+/~
LAT_WORT = /(?!-)[a-z|\-_]+/~
GROSSSCHRIFT = /(?!-)[A-ZÄÖÜ_\-]+/~
......
......@@ -151,10 +151,16 @@ class MLWGrammar(Grammar):
#### BEDEUTUNGS-POSITION #####################################################
BedeutungsPosition = { ZWW "BEDEUTUNG" [LZ] §Bedeutung }+
BedeutungsPosition = { ZWW "BEDEUTUNG" [LZ] §Bedeutung [U1Bedeutung] }+
U1Bedeutung = { ZWW "U1_BEDEUTUNG" [LZ] §Bedeutung [U2Bedeutung] }+
U2Bedeutung = { ZWW "U2_BEDEUTUNG" [LZ] §Bedeutung [U3Bedeutung] }+
U3Bedeutung = { ZWW "U3_BEDEUTUNG" [LZ] §Bedeutung [U4Bedeutung] }+
U4Bedeutung = { ZWW "U4_BEDEUTUNG" [LZ] §Bedeutung [U5Bedeutung] }+
U5Bedeutung = { ZWW "U5_BEDEUTUNG" [LZ] §UntersteBedeutung }+
Bedeutung = (Interpretamente | Bedeutungskategorie) [BelegPosition]
Bedeutungskategorie = /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~ [LZ]
UntersteBedeutung = Interpretamente [BelegPosition]
Bedeutungskategorie = EINZEILER §":" [LZ]
Interpretamente = LateinischeBedeutung [LZ] §DeutscheBedeutung
LateinischeBedeutung = LAT [LZ] LateinischerAusdruck { <","|ZW> LateinischerAusdruck }
DeutscheBedeutung = DEU [LZ] DeutscherAusdruck { <","|ZW> DeutscherAusdruck }
......@@ -230,6 +236,7 @@ class MLWGrammar(Grammar):
DEU_GROSS = /[A-ZÄÖÜ][a-zäöüßę_\-]+/~
GROSSBUCHSTABE = /[A-ZÄÖÜ](?=[ \t\n])/~
KLEINBUCHSTABE = /[a-zäöü](?=[ \t\n])/~
GRI_BUCHSTABE = /[αβγδεζηθικλμνξοπρςστυφχψω]/
DEU_KLEIN = /(?!-)[a-zäöüßę_\-]+/~
LAT_WORT = /(?!-)[a-z|\-_]+/~
GROSSSCHRIFT = /(?!-)[A-ZÄÖÜ_\-]+/~
......@@ -283,7 +290,7 @@ class MLWGrammar(Grammar):
flexion = Forward()
genus = Forward()
wortart = Forward()
source_hash__ = "7ff4250e122c3a05f3c28e3724c7522d"
source_hash__ = "d6cf6c84b25523a02c115ead270afae4"
parser_initialization__ = "upon instantiation"
COMMENT__ = r'#.*'
WHITESPACE__ = r'[\t ]*'
......@@ -320,6 +327,7 @@ class MLWGrammar(Grammar):
GROSSSCHRIFT.set(RE('(?!-)[A-ZÄÖÜ_\\-]+'))
LAT_WORT = RE('(?!-)[a-z|\\-_]+')
DEU_KLEIN = RE('(?!-)[a-zäöüßę_\\-]+')
GRI_BUCHSTABE = RegExp('[αβγδεζηθικλμνξοπρςστυφχψω]')
KLEINBUCHSTABE = RE('[a-zäöü](?=[ \\t\\n])')
GROSSBUCHSTABE = RE('[A-ZÄÖÜ](?=[ \\t\\n])')
DEU_GROSS = RE('[A-ZÄÖÜ][a-zäöüßę_\\-]+')
......@@ -357,9 +365,15 @@ class MLWGrammar(Grammar):
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, mandatory=2)
Bedeutungskategorie = Series(RE('(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+'), Option(LZ))
Bedeutungskategorie = Series(EINZEILER, Token(":"), Option(LZ), mandatory=1)
UntersteBedeutung = Series(Interpretamente, Option(BelegPosition))
Bedeutung = Series(Alternative(Interpretamente, Bedeutungskategorie), Option(BelegPosition))
BedeutungsPosition = OneOrMore(Series(ZWW, Token("BEDEUTUNG"), Option(LZ), Bedeutung, mandatory=3))
U5Bedeutung = OneOrMore(Series(ZWW, Token("U5_BEDEUTUNG"), Option(LZ), UntersteBedeutung, mandatory=3))
U4Bedeutung = OneOrMore(Series(ZWW, Token("U4_BEDEUTUNG"), Option(LZ), Bedeutung, Option(U5Bedeutung), mandatory=3))
U3Bedeutung = OneOrMore(Series(ZWW, Token("U3_BEDEUTUNG"), Option(LZ), Bedeutung, Option(U4Bedeutung), mandatory=3))
U2Bedeutung = OneOrMore(Series(ZWW, Token("U2_BEDEUTUNG"), Option(LZ), Bedeutung, Option(U3Bedeutung), mandatory=3))
U1Bedeutung = OneOrMore(Series(ZWW, Token("U1_BEDEUTUNG"), Option(LZ), Bedeutung, Option(U2Bedeutung), mandatory=3))
BedeutungsPosition = OneOrMore(Series(ZWW, Token("BEDEUTUNG"), Option(LZ), Bedeutung, Option(U1Bedeutung), mandatory=3))
Gegenstand = Synonym(EINZEILER)
Variante = Series(NegativeLookahead(KATEGORIENZEILE), Gegenstand, DPP, Belege)
Varianten = Series(Variante, ZeroOrMore(Series(ZWW, Variante)))
......
#!/usr/bin/python
#######################################################################
#
# SYMBOLS SECTION - Can be edited. Changes will be preserved.
#
#######################################################################
from functools import partial
import os
import sys
try:
import regex as re
except ImportError:
import re
from DHParser import logging, is_filename, load_if_file, \
Grammar, Compiler, nil_preprocessor, \
Lookbehind, Lookahead, Alternative, Pop, Required, Token, Synonym, \
Option, NegativeLookbehind, OneOrMore, RegExp, Retrieve, Series, RE, Capture, \
ZeroOrMore, Forward, NegativeLookahead, mixin_comment, compile_source, \
last_value, counterpart, accumulate, PreprocessorFunc, \
Node, TransformationFunc, TransformationDict, TRUE_CONDITION, \
traverse, remove_children_if, merge_children, is_anonymous, \
reduce_single_child, replace_by_single_child, replace_or_reduce, remove_whitespace, \
remove_expendables, remove_empty, remove_tokens, flatten, is_whitespace, \
is_empty, is_expendable, collapse, replace_content, WHITESPACE_PTYPE, TOKEN_PTYPE, \
remove_parser, remove_content, remove_brackets, replace_parser, \
keep_children, is_one_of, has_content, apply_if, remove_first, remove_last
#######################################################################
#
# PREPROCESSOR SECTION - Can be edited. Changes will be preserved.
#
#######################################################################
def MLWPreprocessor(text):
return text
def get_preprocessor() -> PreprocessorFunc:
return MLWPreprocessor
#######################################################################
#
# PARSER SECTION - Don't edit! CHANGES WILL BE OVERWRITTEN!
#
#######################################################################
class MLWGrammar(Grammar):
r"""Parser for a MLW source file, with this grammar:
# EBNF-Syntax für MLW-Artikel
@ comment = /#.*/ # Kommentare beginnen mit '#' und reichen bis zum Zeilenende
# ohne das Zeilenende zu beinhalten
@ whitespace = /[\t ]*/ # Zeilensprünge zählen nicht als Leerraum
@ literalws = right # Leerraum vor und nach Literalen wird automatisch entfernt
##############################################################################
Artikel = [LZ]
§LemmaPosition
[ArtikelKopf]
BedeutungsPosition
ArtikelVerfasser
[LZ] DATEI_ENDE
#### LEMMA-POSITION ##########################################################
LemmaPosition = "LEMMA" [LZ] §Lemma TR [LemmaVarianten]
GrammatikPosition [EtymologiePosition]
Lemma = [klassisch] [gesichert] LemmaWort
klassisch = "*"
gesichert = "$"
LemmaVarianten = [LZ]
{ LemmaWort §TR }+
[LemmaZusatz §ABS]
LemmaWort = LAT_WORT_TEIL { ("|" | "-") LAT_WORT_TEIL }
LemmaZusatz = "ZUSATZ" §lzs_typ
lzs_typ = /sim\./
## GRAMMATIK-POSITION ##
GrammatikPosition = "GRAMMATIK" [LZ] §wortart ABS flexion [genus] ABS
[GrammatikVarianten]
wortart = "nomen" | "n."
| "verb" | "v."
| "adverb" | "adv."
| "adjektiv" | "adj."
| "praeposition" | "praep."
GrammatikVarianten = { [wortart ABS] flexion [genus] ":" Beleg §ABS }+
flexion = FLEX { "," §FLEX }
FLEX = /-?[a-z]+/~
genus = "maskulinum" | "m."
| "femininum" | "f."
| "neutrum" | "n."
## ETYMOLOGIE-POSITION ##
EtymologiePosition = "ETYMOLOGIE" [LZ] EtymologieVarianten
EtymologieVarianten = { !SCHLUESSELWORT EtymologieVariante }+
EtymologieVariante = /.*/ # NOCH ZU VERFOLLSTÄNDIGEN
#### ARTIKEL-KOPF ############################################################
ArtikelKopf = SchreibweisenPosition
SchreibweisenPosition = "SCHREIBWEISE" [LZ] §SWTyp ":" [LZ]
SWVariante { ABS SWVariante} [LZ]
SWTyp = "script. fat-" | "script."
SWVariante = Schreibweise ":" Beleg
Schreibweise = ZEICHENFOLGE
#### BEDEUTUNGS-POSITION #####################################################
BedeutungsPosition = { "BEDEUTUNG" [LZ] §Bedeutung }+
Bedeutung = (Interpretamente | Bedeutungskategorie) [Belege]
Bedeutungskategorie = /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~ [LZ]
Interpretamente = LateinischeBedeutung [LZ] §DeutscheBedeutung [LZ]
LateinischeBedeutung = SW_LAT /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~
DeutscheBedeutung = SW_DEU /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~
Belege = "BELEGE" [LZ] (EinBeleg | { "*" EinBeleg }) ABS
EinBeleg = { !([LZ] "*" | SCHLUESSELWORT) /\s*[^\n]*/~ [ZW] }+ [Zusatz]
Zusatz = "ZUSATZ" /\s*.*/
#### AUTOR/AUTORIN ###########################################################
ArtikelVerfasser = ("AUTORIN" | "AUTOR") Name
Name = { NAME | NAMENS_ABKÜRZUNG }+
#### Schlüsselwörter #########################################################
SW_LAT = "LATEINISCH" | "LAT"
SW_DEU = "DEUTSCH" | "DEU"
SW_GRIECH = "GRIECHISCH" | "GRIECH" | "GRIE" | "GRI"
SCHLUESSELWORT = { //~ /\n/ }+ !ROEMISCHE_ZAHL /[A-ZÄÖÜ]{3,}\s+/
#### GENERISCHE UND ATOMARE AUSDRÜCKE ########################################
Beleg = ["->"] Verweis
Verweis = ZielName
VerweisZiel = "[" ZielName "]"
ZielName = BUCHSTABENFOLGE
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äöüß]+/~
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*)/~
BUCHSTABENFOLGE = /\w+/~
ZEICHENFOLGE = /[\w()-]+/~
TR = ABS | LZ # (beliebiger) Trenner
ABS = /\s*;\s*/ | { ZWW }+ # Abschluss (durch Semikolon oder Zeilenwechsel)
# ZW = /\n/~ # Zeilenwechsel
LZ = /\s+/ # Leerzeichen oder -zeilen
ZW = !LÜCKE ZEILENSPRUNG # Zeilenwechsel, aber keine Leerzeile(n)
ZWW = ZEILENSPRUNG [ LEERRAUM ] # mindestens ein Zeilenwechsel
LÜCKE = KOMMENTARZEILEN LEERZEILE [LEERRAUM] # Leerraum mit mindestens einer echten Leerzeile
LEERRAUM = { COMMENT__ | /\s+/ }+ # beliebiger horizontaler oder vertikaler Leerraum
LEERZEILE = /[ \t]*(?:\n[ \t]*)+\n/ ~/\n?/ # eine oder mehrere echte LEERZEILEN
RZS = /\s*?\n|$/ # Rückwärtiger Zeilensprung oder Textanfang
ZEILENSPRUNG = /[ \t]*\n/~
KOMMENTARZEILEN = { /[ \t]*\n?[ \t]*/ COMMENT__ } # echte Kommentarzeilen
DATEI_ENDE = !/./
NIEMALS = /(?!.)/
"""
wortart = Forward()
source_hash__ = "af9ff26424eee968f8246fa045058107"
parser_initialization__ = "upon instantiation"
COMMENT__ = r'#.*'
WHITESPACE__ = r'[\t ]*'
WSP__ = mixin_comment(whitespace=WHITESPACE__, comment=COMMENT__)
wspL__ = ''
wspR__ = WSP__
NIEMALS = RegExp('(?!.)')
DATEI_ENDE = NegativeLookahead(RegExp('.'))
KOMMENTARZEILEN = ZeroOrMore(Series(RegExp('[ \\t]*\\n?[ \\t]*'), RegExp(COMMENT__)))
ZEILENSPRUNG = RE('[ \\t]*\\n')
RZS = RegExp('\\s*?\\n|$')
LEERZEILE = Series(RegExp('[ \\t]*(?:\\n[ \\t]*)+\\n'), RE('\\n?', wR='', wL=WSP__))
LEERRAUM = OneOrMore(Alternative(RegExp(COMMENT__), RegExp('\\s+')))
LÜCKE = Series(KOMMENTARZEILEN, LEERZEILE, Option(LEERRAUM))
ZWW = Series(ZEILENSPRUNG, Option(LEERRAUM))
ZW = Series(NegativeLookahead(LÜCKE), ZEILENSPRUNG)
LZ = RegExp('\\s+')
ABS = Alternative(RegExp('\\s*;\\s*'), OneOrMore(ZWW))
TR = Alternative(ABS, LZ)
ZEICHENFOLGE = RE('[\\w()-]+')
BUCHSTABENFOLGE = RE('\\w+')
ROEMISCHE_ZAHL = RE('(?=[MDCLXVI])M*(C[MD]|D?C*)(X[CL]|L?X*)(I[XV]|V?I*)')
ZAHL = 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 = RE('[A-ZÄÖÜ]?[a-zäöüß]+')
NAME = RE('[A-ZÄÖÜÁÀÓÒÚÙÂÔÛ][a-zäöüßáàâóòôúùû]+')
NAMENS_ABKÜRZUNG = RE('[A-ZÄÖÜÁÀÂÓÒÔÚÙÛ]\\.')
ZielName = Synonym(BUCHSTABENFOLGE)
VerweisZiel = Series(Token("["), ZielName, Token("]"))
Verweis = Synonym(ZielName)
Beleg = Series(Option(Token("->")), Verweis)
SCHLUESSELWORT = Series(OneOrMore(Series(RE(''), RegExp('\\n'))), NegativeLookahead(ROEMISCHE_ZAHL), RegExp('[A-ZÄÖÜ]{3,}\\s+'))
SW_GRIECH = Alternative(Token("GRIECHISCH"), Token("GRIECH"), Token("GRIE"), Token("GRI"))
SW_DEU = Alternative(Token("DEUTSCH"), Token("DEU"))
SW_LAT = Alternative(Token("LATEINISCH"), Token("LAT"))
Name = OneOrMore(Alternative(NAME, NAMENS_ABKÜRZUNG))
ArtikelVerfasser = Series(Alternative(Token("AUTORIN"), Token("AUTOR")), Name)
Zusatz = Series(Token("ZUSATZ"), RegExp('\\s*.*'))
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)
DeutscheBedeutung = Series(SW_DEU, RE('(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+'))
LateinischeBedeutung = Series(SW_LAT, RE('(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+'))
Interpretamente = Series(LateinischeBedeutung, Option(LZ), DeutscheBedeutung, Option(LZ), mandatory=2)
Bedeutungskategorie = Series(RE('(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+'), Option(LZ))
Bedeutung = Series(Alternative(Interpretamente, Bedeutungskategorie), Option(Belege))
BedeutungsPosition = OneOrMore(Series(Token("BEDEUTUNG"), Option(LZ), Bedeutung, mandatory=2))
Schreibweise = Synonym(ZEICHENFOLGE)
SWVariante = Series(Schreibweise, Token(":"), Beleg)
SWTyp = Alternative(Token("script. fat-"), Token("script."))
SchreibweisenPosition = Series(Token("SCHREIBWEISE"), Option(LZ), SWTyp, Token(":"), Option(LZ), SWVariante, ZeroOrMore(Series(ABS, SWVariante)), Option(LZ), mandatory=2)
ArtikelKopf = Synonym(SchreibweisenPosition)
EtymologieVariante = RegExp('.*')
EtymologieVarianten = OneOrMore(Series(NegativeLookahead(SCHLUESSELWORT), EtymologieVariante))
EtymologiePosition = Series(Token("ETYMOLOGIE"), Option(LZ), EtymologieVarianten)
genus = Alternative(Token("maskulinum"), Token("m."), Token("femininum"), Token("f."), Token("neutrum"), Token("n."))
FLEX = RE('-?[a-z]+')
flexion = Series(FLEX, ZeroOrMore(Series(Token(","), FLEX, mandatory=1)))
GrammatikVarianten = OneOrMore(Series(Option(Series(wortart, ABS)), flexion, Option(genus), Token(":"), Beleg, ABS, mandatory=5))
wortart.set(Alternative(Token("nomen"), Token("n."), Token("verb"), Token("v."), Token("adverb"), Token("adv."), Token("adjektiv"), Token("adj."), Token("praeposition"), Token("praep.")))
GrammatikPosition = Series(Token("GRAMMATIK"), Option(LZ), wortart, ABS, flexion, Option(genus), ABS, Option(GrammatikVarianten), mandatory=2)
lzs_typ = RegExp('sim\\.')
LemmaZusatz = Series(Token("ZUSATZ"), lzs_typ, mandatory=1)
LemmaWort = Series(LAT_WORT_TEIL, ZeroOrMore(Series(Alternative(Token("|"), Token("-")), LAT_WORT_TEIL)))
LemmaVarianten = Series(Option(LZ), OneOrMore(Series(LemmaWort, TR, mandatory=1)), Option(Series(LemmaZusatz, ABS, mandatory=1)))
gesichert = Token("$")
klassisch = Token("*")
Lemma = Series(Option(klassisch), Option(gesichert), LemmaWort)
LemmaPosition = Series(Token("LEMMA"), Option(LZ), Lemma, TR, Option(LemmaVarianten), GrammatikPosition, Option(EtymologiePosition), mandatory=2)
Artikel = Series(Option(LZ), LemmaPosition, Option(ArtikelKopf), BedeutungsPosition, ArtikelVerfasser, Option(LZ), DATEI_ENDE, mandatory=1)
root__ = Artikel
def get_grammar() -> MLWGrammar:
global thread_local_MLW_grammar_singleton
try:
grammar = thread_local_MLW_grammar_singleton
except NameError:
thread_local_MLW_grammar_singleton = MLWGrammar()
grammar = thread_local_MLW_grammar_singleton
return grammar
#######################################################################
#
# AST SECTION - Can be edited. Changes will be preserved.
#
#######################################################################
MLW_AST_transformation_table = {
# AST Transformations for the MLW-grammar
"+": remove_empty,
"Artikel": [],
"LemmaPosition": [],
"Lemma": [],
"klassisch": [],
"gesichert": [],
"LemmaVarianten": [],
"LemmaWort": [],
"LemmaZusatz": [],
"lzs_typ": [],
"GrammatikPosition": [],
"wortart": [replace_or_reduce],
"GrammatikVarianten": [],
"flexion": [],
"FLEX": [],
"genus": [replace_or_reduce],
"EtymologiePosition": [],
"EtymologieVarianten": [],
"EtymologieVariante": [],
"ArtikelKopf": [replace_by_single_child],
"SchreibweisenPosition": [],
"SWTyp": [replace_or_reduce],
"SWVariante": [],
"Schreibweise": [replace_by_single_child],
"BedeutungsPosition": [],
"Bedeutung": [],
"Bedeutungskategorie": [],
"Interpretamente": [],
"LateinischeBedeutung": [],
"DeutscheBedeutung": [],
"Belege": [],
"EinBeleg": [],
"Zusatz": [],
"ArtikelVerfasser": [],
"Name": [],
"SW_LAT": [replace_or_reduce],
"SW_DEU": [replace_or_reduce],
"SW_GRIECH": [replace_or_reduce],
"Beleg": [replace_by_single_child],
"Verweis": [],
"VerweisZiel": [],
"ZielName": [replace_by_single_child],
"NAMENS_ABKÜRZUNG": [],
"NAME": [],
"DEU_WORT": [],
"DEU_GROSS": [],
"DEU_KLEIN": [],
"LAT_WORT": [],
"LAT_WORT_TEIL": [],
"GROSSSCHRIFT": [],
"GROSSFOLGE": [],
"BUCHSTABENFOLGE": [],
"ZEICHENFOLGE": [],
"TR": [replace_or_reduce],
"ABS": [replace_or_reduce],
"ZW": [],
"LZ": [],
"DATEI_ENDE": [],
"NIEMALS": [],
":Token, :RE": reduce_single_child,
"*": replace_by_single_child
}
def MLWTransform() -> TransformationDict:
return partial(traverse, processing_table=MLW_AST_transformation_table.copy())
def get_transformer() -> TransformationFunc:
global thread_local_MLW_transformer_singleton
try:
transformer = thread_local_MLW_transformer_singleton
except NameError:
thread_local_MLW_transformer_singleton = MLWTransform()
transformer = thread_local_MLW_transformer_singleton
return transformer
#######################################################################
#
# COMPILER SECTION - Can be edited. Changes will be preserved.
#
#######################################################################
class MLWCompiler(Compiler):
"""Compiler for the abstract-syntax-tree of a MLW source file.
"""
def __init__(self, grammar_name="MLW", grammar_source=""):
super(MLWCompiler, self).__init__(grammar_name, grammar_source)
assert re.match('\w+\Z', grammar_name)
def on_Artikel(self, node):
return node
def on_LemmaPosition(self, node):
pass
def on_Lemma(self, node):
pass
def on_klassisch(self, node):
pass
def on_gesichert(self, node):
pass
def on_LemmaVarianten(self, node):
pass
def on_LemmaWort(self, node):
pass
def on_LemmaZusatz(self, node):
pass
def on_lzs_typ(self, node):
pass
def on_GrammatikPosition(self, node):
pass
def on_wortart(self, node):
pass
def on_GrammatikVarianten(self, node):
pass
def on_flexion(self, node):
pass
def on_FLEX(self, node):
pass
def on_genus(self, node):
pass
def on_EtymologiePosition(self, node):
pass
def on_EtymologieVarianten(self, node):
pass
def on_EtymologieVariante(self, node):
pass
def on_ArtikelKopf(self, node):
pass
def on_SchreibweisenPosition(self, node):
pass
def on_SWTyp(self, node):
pass
def on_SWVariante(self, node):
pass
def on_Schreibweise(self, node):
pass
def on_BedeutungsPosition(self, node):
pass
def on_Bedeutung(self, node):
pass
def on_Bedeutungskategorie(self, node):
pass
def on_Interpretamente(self, node):
pass
def on_LateinischeBedeutung(self, node):
pass
def on_DeutscheBedeutung(self, node):
pass
def on_Belege(self, node):
pass
def