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 cfa4f59a authored by di68kap's avatar di68kap
Browse files

- MLW ergänzt...

parent 1100df44
......@@ -1012,6 +1012,8 @@ class Grammar:
if record.node.error_flag:
append_line(errors_only, line)
write_log(full_history, log_file_name + '_full')
if len(full_history) > 250:
write_log(full_history[-200:], log_file_name + '_full.tail')
write_log(match_history, log_file_name + '_match')
write_log(errors_only, log_file_name + '_errors')
......
......@@ -373,12 +373,11 @@ def replace_or_reduce(context: List[Node], condition: Callable=is_named):
"""
node = context[-1]
if len(node.children) == 1:
context.append(node.children[0])
child = node.children[0]
if condition(context):
replace_by(node)
replace_by(node, child)
else:
reduce_child(node)
context.pop()
reduce_child(node, child)
@transformation_factory
......
......@@ -108,7 +108,7 @@ U5Bedeutung = { ZWW "UUUUU_BEDEUTUNG" [LZ] §UntersteBedeutung }+
Bedeutung = (Interpretamente | Bedeutungskategorie) [BelegPosition]
UntersteBedeutung = Interpretamente [BelegPosition]
Bedeutungskategorie = EINZEILER [[LZ] BedeutungsQualifikation] §":"
Bedeutungskategorie = { EINZEILER [LZ] } [BedeutungsQualifikation] §":"
Interpretamente = LateinischeBedeutung ("--"| LZ) §DeutscheBedeutung [":"]
LateinischeBedeutung = LAT [LZ] LateinischerAusdruck { <","|ZW> LateinischerAusdruck }
DeutscheBedeutung = DEU [LZ] DeutscherAusdruck { <","|ZW> DeutscherAusdruck }
......@@ -171,12 +171,12 @@ Zitat = Quellenangabe
{ SEM [ZW] [Anker] [Zusatz] <Stelle | Verweis>
[[ZW] BelegText] [[LZ] Zusatz] }
Quellenangabe = [Anker] < BelegQuelle | Verweis >
BelegQuelle = Autor DPP Werk
Quellenangabe = [<Anker | Zusatz>] < BelegQuelle | Verweis >
BelegQuelle = Autor §DPP [Werk] &SEM
BelegText = /"/ { MEHRZEILER | Zusatz } §/"/~ ["."]
Autor = EINZEILER
Werk = EINZEILER
Autor = EINZEILER [<Anker | Verweis | Zusatz>]
Werk = <EINZEILER [<Anker | Verweis | Zusatz>]>
Stelle = EINZEILER
Datierung = EINZEILER
Edition = EINZEILER
......@@ -202,25 +202,24 @@ NAMENS_ABKÜRZUNG = /[A-ZÄÖÜÁÀÂÓÒÔÚÙÛ]\./~
NAME = /[A-ZÄÖÜÁÀÓÒÚÙÂÔÛ][a-zäöüßáàâóòôúùû]+/~
DEU_WORT = DEU_GROSS | DEU_KLEIN | GROSSBUCHSTABE
DEU_WORT_ERW = DEU_WORT | ( "(" DEU_WORT ")" )
DEU_GROSS = /[A-ZÄÖÜ][a-zäöüßę_\-]+/~
DEU_WORT_ERW = DEU_WORT | ("(" DEU_WORT §")")
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|\-_]+/~
LAT_WORT_ERW = LAT_WORT | ( "(" LAT_WORT ")" )
GROSSSCHRIFT = /(?!-)[A-ZÄÖÜ_\-]+/~
DEU_KLEIN = /(?!--)[a-zäöüßęõ_\-.]+/~
LAT_WORT = /(?!--)[a-z|\-_.]+/~
LAT_WORT_ERW = LAT_WORT | ("(" LAT_WORT §")")
GROSSSCHRIFT = /(?!--)[A-ZÄÖÜ_\-]+/~
ZAHL = /[\d]+/~
SEITENZAHL = /[\d]+(?:\^(?:(?:\{[\d\w.]+\})|\w))?/~ # Zahl mit optionale folgendem hochgestelltem Buchstaben oder Text
ROEMISCHE_ZAHL = /(?=[MDCLXVI])M*(C[MD]|D?C*)(X[CL]|L?X*)(I[XV]|V?I*)(?=[^\w])/~
SATZZEICHEN = /(?!->)(?:(?:,(?!,))|(?:;(?!;))|(?::(?!:))|(?:-(?!-))|[.()\[\]]+)/~ # div. Satzzeichen, aber keine doppelten ,, ;; oder ::
TEIL_SATZZEICHEN = /(?!->)(?:(?:,(?!,))|(?:-(?!-))|[.()]+)/~ # Satzeichen bis auf Doppelpunkt ":", Semikolon ";" und eckige Klammern
SATZZEICHEN = /(?!->)(?:(?:,(?!,))|(?:;(?!;))|(?::(?!:))|(?:-(?!-))|[.()\[\]]+)|[`‘]/~ # div. Satzzeichen, aber keine doppelten ,, ;; oder ::
TEIL_SATZZEICHEN = /(?!->)(?:(?:,(?!,))|(?:-(?!-))|[.()]+)|[`‘]/~ # Satzeichen bis auf Doppelpunkt ":", Semikolon ";" und eckige Klammern
BUCHSTABENFOLGE = /\w+/~
ZEICHENFOLGE = /[\w()-]+/~
# EINZEILER = /[\w()-. \t]+/~
TEXTELEMENT = DEU_WORT | SEITENZAHL | ROEMISCHE_ZAHL
EINZEILER = { TEXTELEMENT | TEIL_SATZZEICHEN }+
FREITEXT = { TEXTELEMENT | SATZZEICHEN | GROSSSCHRIFT }+
......
......@@ -16,11 +16,11 @@ except ImportError:
import re
from DHParser import logging, is_filename, load_if_file, \
Grammar, Compiler, nil_preprocessor, \
Lookbehind, Lookahead, Alternative, Pop, Token, Synonym, SomeOf, \
Lookbehind, Lookahead, Alternative, Pop, Token, Synonym, AllOf, SomeOf, \
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, \
Node, TransformationFunc, TransformationDict, \
traverse, remove_children_if, merge_children, is_anonymous, \
content_from_child, replace_by_child, replace_or_reduce, remove_whitespace, \
remove_expendables, remove_empty, remove_tokens, flatten, is_whitespace, \
......@@ -160,7 +160,7 @@ class MLWGrammar(Grammar):
Bedeutung = (Interpretamente | Bedeutungskategorie) [BelegPosition]
UntersteBedeutung = Interpretamente [BelegPosition]
Bedeutungskategorie = EINZEILER [[LZ] BedeutungsQualifikation] §":"
Bedeutungskategorie = { EINZEILER [LZ] } [BedeutungsQualifikation] §":"
Interpretamente = LateinischeBedeutung ("--"| LZ) §DeutscheBedeutung [":"]
LateinischeBedeutung = LAT [LZ] LateinischerAusdruck { <","|ZW> LateinischerAusdruck }
DeutscheBedeutung = DEU [LZ] DeutscherAusdruck { <","|ZW> DeutscherAusdruck }
......@@ -223,12 +223,12 @@ class MLWGrammar(Grammar):
{ SEM [ZW] [Anker] [Zusatz] <Stelle | Verweis>
[[ZW] BelegText] [[LZ] Zusatz] }
Quellenangabe = [Anker] < BelegQuelle | Verweis >
BelegQuelle = Autor DPP Werk
Quellenangabe = [<Anker | Zusatz>] < BelegQuelle | Verweis >
BelegQuelle = Autor §DPP [Werk] &SEM
BelegText = /"/ { MEHRZEILER | Zusatz } §/"/~ ["."]
Autor = EINZEILER
Werk = EINZEILER
Autor = EINZEILER [<Anker | Verweis | Zusatz>]
Werk = <EINZEILER [<Anker | Verweis | Zusatz>]>
Stelle = EINZEILER
Datierung = EINZEILER
Edition = EINZEILER
......@@ -254,25 +254,24 @@ class MLWGrammar(Grammar):
NAME = /[A-ZÄÖÜÁÀÓÒÚÙÂÔÛ][a-zäöüßáàâóòôúùû]+/~
DEU_WORT = DEU_GROSS | DEU_KLEIN | GROSSBUCHSTABE
DEU_WORT_ERW = DEU_WORT | ( "(" DEU_WORT ")" )
DEU_GROSS = /[A-ZÄÖÜ][a-zäöüßę_\-]+/~
DEU_WORT_ERW = DEU_WORT | ("(" DEU_WORT §")")
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|\-_]+/~
LAT_WORT_ERW = LAT_WORT | ( "(" LAT_WORT ")" )
GROSSSCHRIFT = /(?!-)[A-ZÄÖÜ_\-]+/~
DEU_KLEIN = /(?!--)[a-zäöüßęõ_\-.]+/~
LAT_WORT = /(?!--)[a-z|\-_.]+/~
LAT_WORT_ERW = LAT_WORT | ("(" LAT_WORT §")")
GROSSSCHRIFT = /(?!--)[A-ZÄÖÜ_\-]+/~
ZAHL = /[\d]+/~
SEITENZAHL = /[\d]+(?:\^(?:(?:\{[\d\w.]+\})|\w))?/~ # Zahl mit optionale folgendem hochgestelltem Buchstaben oder Text
ROEMISCHE_ZAHL = /(?=[MDCLXVI])M*(C[MD]|D?C*)(X[CL]|L?X*)(I[XV]|V?I*)(?=[^\w])/~
SATZZEICHEN = /(?!->)(?:(?:,(?!,))|(?:;(?!;))|(?::(?!:))|(?:-(?!-))|[.()\[\]]+)/~ # div. Satzzeichen, aber keine doppelten ,, ;; oder ::
TEIL_SATZZEICHEN = /(?!->)(?:(?:,(?!,))|(?:-(?!-))|[.()]+)/~ # Satzeichen bis auf Doppelpunkt ":", Semikolon ";" und eckige Klammern
SATZZEICHEN = /(?!->)(?:(?:,(?!,))|(?:;(?!;))|(?::(?!:))|(?:-(?!-))|[.()\[\]]+)|[`‘]/~ # div. Satzzeichen, aber keine doppelten ,, ;; oder ::
TEIL_SATZZEICHEN = /(?!->)(?:(?:,(?!,))|(?:-(?!-))|[.()]+)|[`‘]/~ # Satzeichen bis auf Doppelpunkt ":", Semikolon ";" und eckige Klammern
BUCHSTABENFOLGE = /\w+/~
ZEICHENFOLGE = /[\w()-]+/~
# EINZEILER = /[\w()-. \t]+/~
TEXTELEMENT = DEU_WORT | SEITENZAHL | ROEMISCHE_ZAHL
EINZEILER = { TEXTELEMENT | TEIL_SATZZEICHEN }+
FREITEXT = { TEXTELEMENT | SATZZEICHEN | GROSSSCHRIFT }+
......@@ -316,7 +315,7 @@ class MLWGrammar(Grammar):
flexion = Forward()
genus = Forward()
wortart = Forward()
source_hash__ = "5acd793ecc09621740b44d8005c673d0"
source_hash__ = "2c0516a46fa68896294ceaaf72917ded"
parser_initialization__ = "upon instantiation"
COMMENT__ = r'(?:\/\/.*)|(?:\/\*(?:.|\n)*?\*\/)'
WHITESPACE__ = r'[\t ]*'
......@@ -345,20 +344,20 @@ class MLWGrammar(Grammar):
TEXTELEMENT.set(Alternative(DEU_WORT, SEITENZAHL, ROEMISCHE_ZAHL))
ZEICHENFOLGE = RE('[\\w()-]+')
BUCHSTABENFOLGE = RE('\\w+')
TEIL_SATZZEICHEN.set(RE('(?!->)(?:(?:,(?!,))|(?:-(?!-))|[.()]+)'))
SATZZEICHEN.set(RE('(?!->)(?:(?:,(?!,))|(?:;(?!;))|(?::(?!:))|(?:-(?!-))|[.()\\[\\]]+)'))
TEIL_SATZZEICHEN.set(RE('(?!->)(?:(?:,(?!,))|(?:-(?!-))|[.()]+)|[`‘]'))
SATZZEICHEN.set(RE('(?!->)(?:(?:,(?!,))|(?:;(?!;))|(?::(?!:))|(?:-(?!-))|[.()\\[\\]]+)|[`‘]'))
ROEMISCHE_ZAHL.set(RE('(?=[MDCLXVI])M*(C[MD]|D?C*)(X[CL]|L?X*)(I[XV]|V?I*)(?=[^\\w])'))
SEITENZAHL.set(RE('[\\d]+(?:\\^(?:(?:\\{[\\d\\w.]+\\})|\\w))?'))
ZAHL = RE('[\\d]+')
GROSSSCHRIFT.set(RE('(?!-)[A-ZÄÖÜ_\\-]+'))
LAT_WORT_ERW = Alternative(LAT_WORT, Series(Token("("), LAT_WORT, Token(")")))
LAT_WORT.set(RE('(?!-)[a-z|\\-_]+'))
DEU_KLEIN = RE('(?!-)[a-zäöüßę_\\-]+')
GROSSSCHRIFT.set(RE('(?!--)[A-ZÄÖÜ_\\-]+'))
LAT_WORT_ERW = Alternative(LAT_WORT, Series(Token("("), LAT_WORT, Token(")"), mandatory=2))
LAT_WORT.set(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äöüßę_\\-]+')
DEU_WORT_ERW = Alternative(DEU_WORT, Series(Token("("), DEU_WORT, Token(")")))
DEU_GROSS = RE('[A-ZÄÖÜ][a-zäöüßę_\\-.]+')
DEU_WORT_ERW = Alternative(DEU_WORT, Series(Token("("), DEU_WORT, Token(")"), mandatory=2))
DEU_WORT.set(Alternative(DEU_GROSS, DEU_KLEIN, GROSSBUCHSTABE))
NAME = RE('[A-ZÄÖÜÁÀÓÒÚÙÂÔÛ][a-zäöüßáàâóòôúùû]+')
NAMENS_ABKÜRZUNG = RE('[A-ZÄÖÜÁÀÂÓÒÔÚÙÛ]\\.')
......@@ -374,11 +373,11 @@ class MLWGrammar(Grammar):
Edition = Synonym(EINZEILER)
Datierung = Synonym(EINZEILER)
Stelle = Synonym(EINZEILER)
Werk = Synonym(EINZEILER)
Autor = Synonym(EINZEILER)
Werk = AllOf(EINZEILER, Option(SomeOf(Anker, Verweis, Zusatz)))
Autor = Series(EINZEILER, Option(SomeOf(Anker, Verweis, Zusatz)))
BelegText = Series(RegExp('"'), ZeroOrMore(Alternative(MEHRZEILER, Zusatz)), RE('"'), Option(Token(".")), mandatory=2)
BelegQuelle = Series(Autor, DPP, Werk)
Quellenangabe = Series(Option(Anker), SomeOf(BelegQuelle, Verweis))
BelegQuelle = Series(Autor, DPP, Option(Werk), Lookahead(SEM), mandatory=1)
Quellenangabe = Series(Option(SomeOf(Anker, Zusatz)), SomeOf(BelegQuelle, Verweis))
Zitat = Series(Quellenangabe, ZeroOrMore(Series(SEM, Option(ZW), Option(Anker), Option(Zusatz), SomeOf(Stelle, Verweis), Option(Series(Option(ZW), BelegText)), Option(Series(Option(LZ), Zusatz)))))
Beleg = Series(Option(Zusatz), Alternative(Series(Verweis, Option(Zitat)), Zitat), Option(Series(ABS, Zusatz)), Option(Token(".")))
Belege = Series(Option(Token("*")), Beleg, ZeroOrMore(Series(Option(LZ), Token("*"), Beleg)))
......@@ -406,7 +405,7 @@ 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, Alternative(Token("--"), LZ), DeutscheBedeutung, Option(Token(":")), mandatory=2)
Bedeutungskategorie = Series(EINZEILER, Option(Series(Option(LZ), BedeutungsQualifikation)), Token(":"), mandatory=2)
Bedeutungskategorie = Series(ZeroOrMore(Series(EINZEILER, Option(LZ))), Option(BedeutungsQualifikation), Token(":"), mandatory=2)
UntersteBedeutung = Series(Interpretamente, Option(BelegPosition))
Bedeutung = Series(Alternative(Interpretamente, Bedeutungskategorie), Option(BelegPosition))
U5Bedeutung = OneOrMore(Series(ZWW, Token("UUUUU_BEDEUTUNG"), Option(LZ), UntersteBedeutung, mandatory=3))
......
......@@ -12,7 +12,7 @@ M1: """
{saepe}"""
[match:Belege]
M1: """{=> v. ibi.} * Annal.: Plac. a. 1266 p. 516,21."""
M1: """{=> v. ibi.} * Annal.: Plac.; a. 1266 p. 516,21."""
[match:Beleg]
M1: """Catal.: thes. Germ.; 28,11 (post 851) "-um III.""""
......
......@@ -21,7 +21,7 @@ from MLWCompiler import get_preprocessor, get_grammar, get_transformer, get_comp
for root, dirs, files in os.walk('Beispiele'):
for fname in files:
entry = os.path.join(root, fname)
if fnmatch.fnmatch(entry, '*fascitergula.mlw'):
if fnmatch.fnmatch(entry, '*imperium.mlw'):
print('\n Parse: ' + entry)
raw_name = os.path.splitext(entry)[0]
with logging(True):
......
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