Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
7
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Open sidebar
badw-it
DHParser
Commits
a5dfe5b5
Commit
a5dfe5b5
authored
Nov 23, 2017
by
di68kap
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
- bugfix: syntaxtree.Node.__len__()
- MLW erweitert
parent
10c52b21
Changes
16
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
400 additions
and
410 deletions
+400
-410
DHParser/syntaxtree.py
DHParser/syntaxtree.py
+1
-1
DHParser/testing.py
DHParser/testing.py
+4
-3
examples/MLW/Beispiele/facitergula/fascitergula.mlw
examples/MLW/Beispiele/facitergula/fascitergula.mlw
+10
-10
examples/MLW/Beispiele/imperium/imperium.mlw
examples/MLW/Beispiele/imperium/imperium.mlw
+10
-9
examples/MLW/MLW.ebnf
examples/MLW/MLW.ebnf
+57
-54
examples/MLW/MLWCompiler.py
examples/MLW/MLWCompiler.py
+115
-106
examples/MLW/MLW_ebnf_ERRORS.txt
examples/MLW/MLW_ebnf_ERRORS.txt
+0
-11
examples/MLW/grammar_tests/02_test_lemmaposition.ini
examples/MLW/grammar_tests/02_test_lemmaposition.ini
+5
-9
examples/MLW/grammar_tests/03_test_grammatik.ini
examples/MLW/grammar_tests/03_test_grammatik.ini
+6
-6
examples/MLW/grammar_tests/04_test_schreibweise.ini
examples/MLW/grammar_tests/04_test_schreibweise.ini
+23
-14
examples/MLW/grammar_tests/05_test_bedeutung.ini
examples/MLW/grammar_tests/05_test_bedeutung.ini
+5
-39
examples/MLW/grammar_tests/06_test_autor.ini
examples/MLW/grammar_tests/06_test_autor.ini
+2
-1
examples/MLW/grammar_tests/08_test_belege.ini
examples/MLW/grammar_tests/08_test_belege.ini
+45
-0
examples/MLW/grammar_tests/REPORT/02_test_lemmaposition.md
examples/MLW/grammar_tests/REPORT/02_test_lemmaposition.md
+91
-120
examples/MLW/tst_MLW_grammar.py
examples/MLW/tst_MLW_grammar.py
+1
-1
examples/MLW/verarbeite_Beispiele.py
examples/MLW/verarbeite_Beispiele.py
+25
-26
No files found.
DHParser/syntaxtree.py
View file @
a5dfe5b5
...
...
@@ -261,7 +261,7 @@ class Node(collections.abc.Sized):
def
__len__
(
self
):
if
self
.
_len
<
0
:
self
.
_len
=
sum
(
child
.
_len
for
child
in
self
.
children
)
\
self
.
_len
=
sum
(
len
(
child
)
for
child
in
self
.
children
)
\
if
self
.
children
else
len
(
self
.
_result
)
return
self
.
_len
...
...
DHParser/testing.py
View file @
a5dfe5b5
...
...
@@ -269,9 +269,10 @@ def grammar_suite(directory, parser_factory, transformer_factory,
for
error
in
all_errors
[
filename
]:
error_report
.
append
(
'
\t
'
+
'
\n\t
'
.
join
(
error
.
split
(
'
\n
'
)))
if
error_report
:
if
verbose
:
print
(
"
\n
FAILURE! %i error%s found!
\n
"
%
(
err_N
,
's'
if
err_N
>
1
else
''
))
return
(
'Test suite "%s" revealed some errors:
\n\n
'
%
directory
)
+
'
\n
'
.
join
(
error_report
)
# if verbose:
# print("\nFAILURE! %i error%s found!\n" % (err_N, 's' if err_N > 1 else ''))
return
(
'Test suite "%s" revealed %s error%s:
\n\n
'
%
(
directory
,
err_N
,
's'
if
err_N
>
1
else
''
)
+
'
\n
'
.
join
(
error_report
))
if
verbose
:
print
(
"
\n
SUCCESS! All tests passed :-)
\n
"
)
return
''
...
...
examples/MLW/Beispiele/facitergula/fascitergula.mlw
View file @
a5dfe5b5
...
...
@@ -11,15 +11,15 @@ LEMMA facitergula
GRAMMATIK
nomen; -ae f.
-us, -i m.: ->
v.
ibi
-um, -i n.: ->
v.
ibi
-us, -i m.: ->
{
ibi
1}
-um, -i n.: ->
{
ibi
2}
SCHREIBWEISE
script.:
vizreg-: ->
Verweis_1
festregel(a): ->
v. ibi
fezdregl(a): ->
v. ibi
vizreg-: ->
{ibi 3}
festregel(a): ->
{ibi 4}
fezdregl(a): ->
{ibi 5}
BEDEUTUNG
...
...
@@ -29,14 +29,14 @@ DEUTSCH Gesichts-, Schweißtuch [usu liturg.; de re v. p. 32, 63]
BELEGE
* Catal.: thes. Germ.; 28,11 (post 851) "-um III."
* Form.: Sangall.; 39 p. 421,16 "munuscula ... direximus, hoc est palliolum ... ,
* Form.: Sangall.;
{ibi 2}
39 p. 421,16 "munuscula ... direximus, hoc est palliolum ... ,
-as duas."
* Catal.: thes. Germ.; 18,7 "-eterculi viginti quatuor".
* Libri: confrat. I; app. A 6 p. 137,30 "pulpitum ... -a cocco imaginata
* Libri: confrat. I;
{ibi 1}
app. A 6 p. 137,30 "pulpitum ... -a cocco imaginata
circumdari iussit pontifex."
*
{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";
92,6 "fascerculę tres"; 21,20 IIII "festregelę"
* Catal.: thes. Germ.
-> {ID extern}; {ibi 3}
76,15 "-rulae II"; 40,5 VI "vizregule"; 129a,5 "-sterculas
II.";
{ibi 5}
24,8 "-itella X"; 114,8 VIII "fezdreglę"; 6,24 "fasciutercule VII";
{ibi 4}
92,6 "fascerculę tres"; 21,20 IIII "festregelę"
ZUSATZ saepe.
...
...
examples/MLW/Beispiele/imperium/imperium.mlw
View file @
a5dfe5b5
LEMMA imperi
|
um
LEMMA imperium
inperium
GRAMMATIK
nomen; -i n.
...
...
@@ -7,22 +8,22 @@ GRAMMATIK
SCHREIBWEISE
script.:
hym-:
v. ibi.
em-: Chron. Fred. 2,35sqq. capit. p. 43. 2,36 p. 60,10.
ym-: Chart. Sangall. A 194.
impir-: v. ibi.
hym-:
-> {ibi 1}
em-: Chron.
:
Fred. 2,35sqq. capit. p. 43. 2,36 p. 60,10.
ym-: Chart.
:
Sangall. A 194.
impir-:
-> {
v. ibi.
}
STRUKTUR
form. sing.:
gen.:
-ri: v. ibi. adde Annal. Plac. a. 1266 p. 516,21.
-iae: Chron. Fred. 2,33. p. 56,22. 2,35.
-ri:
{
v. ibi.
}
adde Annal.
:
Plac. a. 1266 p. 516,21.
-iae: Chron.
:
Fred. 2,33. p. 56,22. 2,35.
abl.:
-um: Chron. Fred. 2,15. 2,35sqq. capit. p. 43.
-um: Chron.
:
Fred. 2,15. 2,35sqq. capit. p. 43.
VERWECHSELBAR
confunditur c.:
imperitus: v. ibi.
imperitus:
-> {
v. ibi.
}
BEDEUTUNG
...
...
examples/MLW/MLW.ebnf
View file @
a5dfe5b5
...
...
@@ -22,11 +22,10 @@ Artikel = [LZ]
[LZ] DATEI_ENDE
#### LEMMA-POSITION ##########################################################
LemmaPosition = "LEMMA" [LZ] §Lemma TR [LemmaVarianten]
GrammatikPosition [Zusatz]
[ABS]
LemmaPosition =
[ABS]
"LEMMA" [LZ] §Lemma TR [LemmaVarianten]
GrammatikPosition [Zusatz]
Lemma = [< klassisch | gesichert >] LemmaWort
klassisch = "*"
...
...
@@ -34,16 +33,15 @@ Lemma = [< klassisch | gesichert >] LemmaWort
LemmaWort = LAT_WORT
LemmaVarianten = [LZ]
{ LemmaVariante §TR }+
[Zusatz §ABS]
LemmaVarianten = LemmaVariante { [TR] LemmaVariante }
[[TR] Zusatz]
LemmaVariante = LAT_WORT
## GRAMMATIK-POSITION ##
GrammatikPosition = "GRAMMATIK" [LZ] §Grammatik ABS
{
GrammatikVariante
§ABS
}
GrammatikPosition =
ZWW
"GRAMMATIK" [LZ] §Grammatik
{
ABS GrammatikVariante }
Grammatik = wortart §ABS flexion [genus]
...
...
@@ -68,10 +66,10 @@ GrammatikVariante = [wortart ABS] flexion [genus] DPP Beleg { FORTSETZUNG Beleg
#### ETYMOLOGIE-POSITION #####################################################
EtymologiePosition = "ETYMOLOGIE" [LZ] { EtymologieVariante }+
EtymologiePosition =
ZWW
"ETYMOLOGIE" [LZ] { EtymologieVariante }+
EtymologieVariante = LAT | GRI [EtymologieBesonderheit] ["ETYM" Etymologie] DPP Beleg
EtymologieBesonderheit =
FREITEXT
Etymologie =
FREITEXT
EtymologieBesonderheit =
EINZEILER
Etymologie =
EINZEILER
#### ARTIKEL-KOPF ############################################################
...
...
@@ -82,29 +80,30 @@ ArtikelKopf = < SchreibweisenPosition
| MetrikPosition
| VerwechselungPosition >
SchreibweisenPosition = "SCHREIBWEISE" Position
StrukturPosition = "STRUKTUR" Position
GebrauchPosition = "GEBRAUCH" Position
MetrikPosition = "METRIK" Position
VerwechselungPosition = "VERWECHSELBAR" Position
SchreibweisenPosition =
ZWW
"SCHREIBWEISE" Position
StrukturPosition =
ZWW
"STRUKTUR" Position
GebrauchPosition =
ZWW
"GEBRAUCH" Position
MetrikPosition =
ZWW
"METRIK" Position
VerwechselungPosition =
ZWW
"VERWECHSELBAR" Position
## ARTIKELKOPF POSITIONEN ##
Position = [LZ] §{ Kategorie }+
Kategorie = Besonderheit §DPP [LZ] ( Varianten | { Kategorie }+ ) ZWW
Besonderheit = FREITEXT
Varianten = Variante { ABS Variante }
Variante = !KATEGORIENZEILE Gegenstand DPP Beleg
Gegenstand = ZEICHENFOLGE
Position = [LZ] §Kategorien
Kategorien = Kategorie { ZWW Kategorie }
Kategorie = Besonderheit §DPP [LZ] ( Varianten | Kategorien )
Besonderheit = EINZEILER
Varianten = Variante { ZWW Variante }
Variante = !KATEGORIENZEILE Gegenstand DPP Belege
Gegenstand = EINZEILER
#### BEDEUTUNGS-POSITION #####################################################
BedeutungsPosition = { "BEDEUTUNG" [LZ] §Bedeutung }+
BedeutungsPosition = {
ZWW
"BEDEUTUNG" [LZ] §Bedeutung }+
Bedeutung = (Interpretamente | Bedeutungskategorie) [Beleg
e
]
Bedeutung = (Interpretamente | Bedeutungskategorie) [Beleg
Position
]
Bedeutungskategorie = /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~ [LZ]
Interpretamente = LateinischeBedeutung [LZ] §DeutscheBedeutung
[LZ]
Interpretamente = LateinischeBedeutung [LZ] §DeutscheBedeutung
LateinischeBedeutung = LAT [LZ] LateinischerAusdruck { <","|ZW> LateinischerAusdruck }
DeutscheBedeutung = DEU [LZ] DeutscherAusdruck { <","|ZW> DeutscherAusdruck }
...
...
@@ -113,22 +112,22 @@ DeutscherAusdruck = DEU_WORT { //~ DEU_WORT } [/\s*/ BedeutungsQualifikation]
BedeutungsQualifikation = "[" EINZEILER { <SEM|ZW> EINZEILER } §"]"
Beleg
e =
"BELEGE"
{
ZWW
"*"
Beleg
}+ ABS
Beleg
Position = ZWW
"BELEGE" ZWW Beleg
e
#### VERWEIS-POSITION #####################################################
VerweisPosition = "VERWEISE"
VerweisPosition =
ZWW
"VERWEISE"
#### UNTER-ARTIKEL ########################################################
UnterArtikel = "UNTER-ARTIKEL"
UnterArtikel =
ZWW
"UNTER-ARTIKEL"
#### AUTOR/AUTORIN ###########################################################
ArtikelVerfasser = ("AUTORIN" | "AUTOR") Name
ArtikelVerfasser =
ZWW
("AUTORIN" | "AUTOR") Name
Name = { NAME | NAMENS_ABKÜRZUNG }+
...
...
@@ -145,27 +144,29 @@ SCHLUESSELWORT = { //~ /\n/ }+ !ROEMISCHE_ZAHL /[A-ZÄÖÜ]{3,}\s+/
#### ZUSATZ an verschiedenen Stellen der Struktur ############################
Zusatz = "ZUSATZ" §{ [TR] zusatz_typ
["."]
}+
zusatz_typ = "adde" | "al" | "sim." | "saepe" | "vel-rarius" | "vel" |
FREITEXT
Zusatz = "ZUSATZ" §{ [TR] zusatz_typ }+
zusatz_typ = "adde" | "al" | "sim." | "saepe" | "vel-rarius" | "vel" |
EINZEILER
#### BELEGE ##################################################################
Beleg = Verweis | Zitat
Zitat = BelegQuelle { SEM Stelle BelegText } [[TR] Zusatz]
Belege = ["*"] Beleg { [LZ] "*" Beleg }
Beleg = (Verweis [Zitat]) | Zitat
Zitat = Quellenangabe { SEM [ZW] [Anker] <Stelle | Verweis> [[ZW] BelegText] } [[TR] Zusatz]
Quellenangabe = [Anker] < BelegQuelle | Verweis >
BelegQuelle = Autor DPP Werk
BelegText =
~
/"/
FREITEXT
§/"/~ ["."]
BelegText = /"/
MEHRZEILER
§/"/~ ["."]
Verweis =
"->" §
ZielName
VerweisZiel
= "{" Ziel
Name
"}"
Ziel
Name
=
EINZEILER
Verweis = "->" §
Anker
Anker
= "{" Ziel
ID §
"}"
Ziel
ID
=
FREITEXT
Autor =
FREITEXT
Werk =
FREITEXT
Stelle =
FREITEXT
Datierung =
FREITEXT
Edition =
FREITEXT
Autor =
EINZEILER
Werk =
EINZEILER
Stelle =
EINZEILER
Datierung =
EINZEILER
Edition =
EINZEILER
#### GENERISCHE UND ATOMARE AUSDRÜCKE ########################################
...
...
@@ -174,25 +175,27 @@ NAMENS_ABKÜRZUNG = /[A-ZÄÖÜÁÀÂÓÒÔÚÙÛ]\./~
NAME = /[A-ZÄÖÜÁÀÓÒÚÙÂÔÛ][a-zäöüßáàâóòôúùû]+/~
DEU_WORT = DEU_GROSS | DEU_KLEIN | GROSSBUCHSTABE
DEU_GROSS = /[A-ZÄÖÜ][a-zäöüßę\-]+/
GROSSBUCHSTABE = /[A-ZÄÖÜ](?=[ \t\n])/
DEU_KLEIN = /[a-zäöüßę\-]+/
LAT_WORT = /[a-z|\-]+/
GROSSSCHRIFT = /[A-ZÄÖÜ]+/
ZAHL = /\d+/~
ROEMISCHE_ZAHL = /(?=[MDCLXVI])M*(C[MD]|D?C*)(X[CL]|L?X*)(I[XV]|V?I*)/~
DEU_GROSS = /[A-ZÄÖÜ][a-zäöüßę_\-]+/~
GROSSBUCHSTABE = /[A-ZÄÖÜ](?=[ \t\n])/~
KLEINBUCHSTABE = /[a-zäöü](?=[ \t\n])/~
DEU_KLEIN = /(?!-)[a-zäöüßę_\-]+/~
LAT_WORT = /(?!-)[a-z|\-_]+/~
GROSSSCHRIFT = /(?!-)[A-ZÄÖÜ_\-]+/~
ZAHL = /[\d_]+/~
ROEMISCHE_ZAHL = /(?=[MDCLXVI])M*(C[MD]|D?C*)(X[CL]|L?X*)(I[XV]|V?I*)(?=[^\w])/~
SATZZEICHEN = /(?:,(?!,))|(?:;(?!;))|(?::(?!:))|[.()\[\]\-]+/~ # div. Satzzeichen, aber keine doppelten ,, ;; oder ::
SATZZEICHEN = /(?
!->)(?:(?
:,(?!,))|(?:;(?!;))|(?::(?!:))|[.()\[\]\-]+
)
/~ # div. Satzzeichen, aber keine doppelten ,, ;; oder ::
BUCHSTABENFOLGE = /\w+/~
ZEICHENFOLGE = /[\w()-]+/~
EINZEILER = /[\w()-. \t]+/~
TEXTELEMENT = (DEU_WORT //~) | ZAHL | ROEMISCHE_ZAHL
FREITEXT = { TEXTELEMENT | /[.()\[\]\-\s]+/ | /,(?!,)\s*/ }+
ERW_FREITEXT = { TEXTELEMENT | SATZZEICHEN | /\s+/ }+
# EINZEILER = /[\w()-. \t]+/~
TEXTELEMENT = DEU_WORT | ZAHL | ROEMISCHE_ZAHL
EINZEILER = { TEXTELEMENT | /(?!->)[.()\-]+/~ | /,(?!,)/~ }+
FREITEXT = { TEXTELEMENT | SATZZEICHEN | GROSSSCHRIFT }+
MEHRZEILER = { FREITEXT | /\s+(?=[\w,;:.\(\)\-])/ }+
TR = ABS | LZ # (beliebiger) Trenner
ABS = /\s*;;?\s*/ |
{
ZWW
}+
# Abschluss (durch Semikolon oder Zeilenwechsel)
ABS = /\s*;;?\s*/ | ZWW
# Abschluss (durch Semikolon oder Zeilenwechsel)
# ZW = /\n/~ # Zeilenwechsel
LZ = /\s+/ # Leerzeichen oder -zeilen
DPP = /::?/~ # Doppelpunkt als Trenner
...
...
examples/MLW/MLWCompiler.py
View file @
a5dfe5b5
...
...
@@ -74,11 +74,10 @@ class MLWGrammar(Grammar):
[LZ] DATEI_ENDE
#### LEMMA-POSITION ##########################################################
LemmaPosition = "LEMMA" [LZ] §Lemma TR [LemmaVarianten]
GrammatikPosition [Zusatz]
[ABS]
LemmaPosition =
[ABS]
"LEMMA" [LZ] §Lemma TR [LemmaVarianten]
GrammatikPosition [Zusatz]
Lemma = [< klassisch | gesichert >] LemmaWort
klassisch = "*"
...
...
@@ -86,16 +85,15 @@ class MLWGrammar(Grammar):
LemmaWort = LAT_WORT
LemmaVarianten = [LZ]
{ LemmaVariante §TR }+
[Zusatz §ABS]
LemmaVarianten = LemmaVariante { [TR] LemmaVariante }
[[TR] Zusatz]
LemmaVariante = LAT_WORT
## GRAMMATIK-POSITION ##
GrammatikPosition = "GRAMMATIK" [LZ] §Grammatik ABS
{
GrammatikVariante
§ABS
}
GrammatikPosition =
ZWW
"GRAMMATIK" [LZ] §Grammatik
{
ABS GrammatikVariante }
Grammatik = wortart §ABS flexion [genus]
...
...
@@ -120,10 +118,10 @@ class MLWGrammar(Grammar):
#### ETYMOLOGIE-POSITION #####################################################
EtymologiePosition = "ETYMOLOGIE" [LZ] { EtymologieVariante }+
EtymologiePosition =
ZWW
"ETYMOLOGIE" [LZ] { EtymologieVariante }+
EtymologieVariante = LAT | GRI [EtymologieBesonderheit] ["ETYM" Etymologie] DPP Beleg
EtymologieBesonderheit =
FREITEXT
Etymologie =
FREITEXT
EtymologieBesonderheit =
EINZEILER
Etymologie =
EINZEILER
#### ARTIKEL-KOPF ############################################################
...
...
@@ -134,29 +132,30 @@ class MLWGrammar(Grammar):
| MetrikPosition
| VerwechselungPosition >
SchreibweisenPosition = "SCHREIBWEISE" Position
StrukturPosition = "STRUKTUR" Position
GebrauchPosition = "GEBRAUCH" Position
MetrikPosition = "METRIK" Position
VerwechselungPosition = "VERWECHSELBAR" Position
SchreibweisenPosition =
ZWW
"SCHREIBWEISE" Position
StrukturPosition =
ZWW
"STRUKTUR" Position
GebrauchPosition =
ZWW
"GEBRAUCH" Position
MetrikPosition =
ZWW
"METRIK" Position
VerwechselungPosition =
ZWW
"VERWECHSELBAR" Position
## ARTIKELKOPF POSITIONEN ##
Position = [LZ] §{ Kategorie }+
Kategorie = Besonderheit §DPP [LZ] ( Varianten | { Kategorie }+ ) ZWW
Besonderheit = FREITEXT
Varianten = Variante { ABS Variante }
Variante = !KATEGORIENZEILE Gegenstand DPP Beleg
Gegenstand = ZEICHENFOLGE
Position = [LZ] §Kategorien
Kategorien = Kategorie { ZWW Kategorie }
Kategorie = Besonderheit §DPP [LZ] ( Varianten | Kategorien )
Besonderheit = EINZEILER
Varianten = Variante { ZWW Variante }
Variante = !KATEGORIENZEILE Gegenstand DPP Belege
Gegenstand = EINZEILER
#### BEDEUTUNGS-POSITION #####################################################
BedeutungsPosition = { "BEDEUTUNG" [LZ] §Bedeutung }+
BedeutungsPosition = {
ZWW
"BEDEUTUNG" [LZ] §Bedeutung }+
Bedeutung = (Interpretamente | Bedeutungskategorie) [Beleg
e
]
Bedeutung = (Interpretamente | Bedeutungskategorie) [Beleg
Position
]
Bedeutungskategorie = /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~ [LZ]
Interpretamente = LateinischeBedeutung [LZ] §DeutscheBedeutung
[LZ]
Interpretamente = LateinischeBedeutung [LZ] §DeutscheBedeutung
LateinischeBedeutung = LAT [LZ] LateinischerAusdruck { <","|ZW> LateinischerAusdruck }
DeutscheBedeutung = DEU [LZ] DeutscherAusdruck { <","|ZW> DeutscherAusdruck }
...
...
@@ -165,22 +164,22 @@ class MLWGrammar(Grammar):
BedeutungsQualifikation = "[" EINZEILER { <SEM|ZW> EINZEILER } §"]"
Beleg
e =
"BELEGE"
{
ZWW
"*"
Beleg
}+ ABS
Beleg
Position = ZWW
"BELEGE" ZWW Beleg
e
#### VERWEIS-POSITION #####################################################
VerweisPosition = "VERWEISE"
VerweisPosition =
ZWW
"VERWEISE"
#### UNTER-ARTIKEL ########################################################
UnterArtikel = "UNTER-ARTIKEL"
UnterArtikel =
ZWW
"UNTER-ARTIKEL"
#### AUTOR/AUTORIN ###########################################################
ArtikelVerfasser = ("AUTORIN" | "AUTOR") Name
ArtikelVerfasser =
ZWW
("AUTORIN" | "AUTOR") Name
Name = { NAME | NAMENS_ABKÜRZUNG }+
...
...
@@ -197,27 +196,29 @@ class MLWGrammar(Grammar):
#### ZUSATZ an verschiedenen Stellen der Struktur ############################
Zusatz = "ZUSATZ" §{ [TR] zusatz_typ
["."]
}+
zusatz_typ = "adde" | "al" | "sim." | "saepe" | "vel-rarius" | "vel" |
FREITEXT
Zusatz = "ZUSATZ" §{ [TR] zusatz_typ }+
zusatz_typ = "adde" | "al" | "sim." | "saepe" | "vel-rarius" | "vel" |
EINZEILER
#### BELEGE ##################################################################
Beleg = Verweis | Zitat
Zitat = BelegQuelle { SEM Stelle BelegText } [[TR] Zusatz]
Belege = ["*"] Beleg { [LZ] "*" Beleg }
Beleg = (Verweis [Zitat]) | Zitat
Zitat = Quellenangabe { SEM [ZW] [Anker] <Stelle | Verweis> [[ZW] BelegText] } [[TR] Zusatz]
Quellenangabe = [Anker] < BelegQuelle | Verweis >
BelegQuelle = Autor DPP Werk
BelegText =
~
/"/
FREITEXT
§/"/~ ["."]
BelegText = /"/
MEHRZEILER
§/"/~ ["."]
Verweis =
"->" §
ZielName
VerweisZiel
= "{" Ziel
Name
"}"
Ziel
Name
=
EINZEILER
Verweis = "->" §
Anker
Anker
= "{" Ziel
ID §
"}"
Ziel
ID
=
FREITEXT
Autor =
FREITEXT
Werk =
FREITEXT
Stelle =
FREITEXT
Datierung =
FREITEXT
Edition =
FREITEXT
Autor =
EINZEILER
Werk =
EINZEILER
Stelle =
EINZEILER
Datierung =
EINZEILER
Edition =
EINZEILER
#### GENERISCHE UND ATOMARE AUSDRÜCKE ########################################
...
...
@@ -226,25 +227,27 @@ class MLWGrammar(Grammar):
NAME = /[A-ZÄÖÜÁÀÓÒÚÙÂÔÛ][a-zäöüßáàâóòôúùû]+/~
DEU_WORT = DEU_GROSS | DEU_KLEIN | GROSSBUCHSTABE
DEU_GROSS = /[A-ZÄÖÜ][a-zäöüßę\-]+/
GROSSBUCHSTABE = /[A-ZÄÖÜ](?=[ \t\n])/
DEU_KLEIN = /[a-zäöüßę\-]+/
LAT_WORT = /[a-z|\-]+/
GROSSSCHRIFT = /[A-ZÄÖÜ]+/
ZAHL = /\d+/~
ROEMISCHE_ZAHL = /(?=[MDCLXVI])M*(C[MD]|D?C*)(X[CL]|L?X*)(I[XV]|V?I*)/~
DEU_GROSS = /[A-ZÄÖÜ][a-zäöüßę_\-]+/~
GROSSBUCHSTABE = /[A-ZÄÖÜ](?=[ \t\n])/~
KLEINBUCHSTABE = /[a-zäöü](?=[ \t\n])/~
DEU_KLEIN = /(?!-)[a-zäöüßę_\-]+/~
LAT_WORT = /(?!-)[a-z|\-_]+/~
GROSSSCHRIFT = /(?!-)[A-ZÄÖÜ_\-]+/~
ZAHL = /[\d_]+/~
ROEMISCHE_ZAHL = /(?=[MDCLXVI])M*(C[MD]|D?C*)(X[CL]|L?X*)(I[XV]|V?I*)(?=[^\w])/~
SATZZEICHEN = /(?:,(?!,))|(?:;(?!;))|(?::(?!:))|[.()\[\]\-]+/~ # div. Satzzeichen, aber keine doppelten ,, ;; oder ::
SATZZEICHEN = /(?
!->)(?:(?
:,(?!,))|(?:;(?!;))|(?::(?!:))|[.()\[\]\-]+
)
/~ # div. Satzzeichen, aber keine doppelten ,, ;; oder ::
BUCHSTABENFOLGE = /\w+/~
ZEICHENFOLGE = /[\w()-]+/~
EINZEILER = /[\w()-. \t]+/~
TEXTELEMENT = (DEU_WORT //~) | ZAHL | ROEMISCHE_ZAHL
FREITEXT = { TEXTELEMENT | /[.()\[\]\-\s]+/ | /,(?!,)\s*/ }+
ERW_FREITEXT = { TEXTELEMENT | SATZZEICHEN | /\s+/ }+
# EINZEILER = /[\w()-. \t]+/~
TEXTELEMENT = DEU_WORT | ZAHL | ROEMISCHE_ZAHL
EINZEILER = { TEXTELEMENT | /(?!->)[.()\-]+/~ | /,(?!,)/~ }+
FREITEXT = { TEXTELEMENT | SATZZEICHEN | GROSSSCHRIFT }+
MEHRZEILER = { FREITEXT | /\s+(?=[\w,;:.\(\)\-])/ }+
TR = ABS | LZ # (beliebiger) Trenner
ABS = /\s*;;?\s*/ |
{
ZWW
}+
# Abschluss (durch Semikolon oder Zeilenwechsel)
ABS = /\s*;;?\s*/ | ZWW
# Abschluss (durch Semikolon oder Zeilenwechsel)
# ZW = /\n/~ # Zeilenwechsel
LZ = /\s+/ # Leerzeichen oder -zeilen
DPP = /::?/~ # Doppelpunkt als Trenner
...
...
@@ -268,7 +271,9 @@ class MLWGrammar(Grammar):
DUMMY = "EBNF-Grammatik an dieser Stelle noch nicht definiert!"
"""
DEU_WORT
=
Forward
()
Kategorie
=
Forward
()
FREITEXT
=
Forward
()
GROSSSCHRIFT
=
Forward
()
Kategorien
=
Forward
()
ROEMISCHE_ZAHL
=
Forward
()
SATZZEICHEN
=
Forward
()
TEXTELEMENT
=
Forward
()
...
...
@@ -278,7 +283,7 @@ class MLWGrammar(Grammar):
flexion
=
Forward
()
genus
=
Forward
()
wortart
=
Forward
()
source_hash__
=
"
1d6f8c60413469e9350a45b956fcd9f
d"
source_hash__
=
"
7ff4250e122c3a05f3c28e3724c7522
d"
parser_initialization__
=
"upon instantiation"
COMMENT__
=
r
'#.*'
WHITESPACE__
=
r
'[\t ]*'
...
...
@@ -301,73 +306,77 @@ class MLWGrammar(Grammar):
SEM
=
RE
(
';;?'
)
DPP
=
RE
(
'::?'
)
LZ
=
RegExp
(
'
\\
s+'
)
ABS
=
Alternative
(
RegExp
(
'
\\
s*;;?
\\
s*'
),
OneOrMore
(
ZWW
)
)
ABS
=
Alternative
(
RegExp
(
'
\\
s*;;?
\\
s*'
),
ZWW
)
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]+'
)
MEHRZEILER
=
OneOrMore
(
Alternative
(
FREITEXT
,
RegExp
(
'
\\
s+(?=[
\\
w,;:.
\\
(
\\
)
\\
-])
'
)))
FREITEXT
.
set
(
OneOrMore
(
Alternative
(
TEXTELEMENT
,
SATZZEICHEN
,
GROSSSCHRIFT
)))
EINZEILER
=
OneOrMore
(
Alternative
(
TEXTELEMENT
,
RE
(
'(?!->)[.()
\\
-]+'
),
RE
(
',(?!,)'
)
))
TEXTELEMENT
.
set
(
Alternative
(
DEU_WORT
,
ZAHL
,
ROEMISCHE_ZAHL
)
)
ZEICHENFOLGE
=
RE
(
'[
\\
w()-]+'
)
BUCHSTABENFOLGE
=
RE
(
'
\\
w+'
)
SATZZEICHEN
.
set
(
RE
(
'(?:,(?!,))|(?:;(?!;))|(?::(?!:))|[.()
\\
[
\\
]
\\
-]+'
))
ROEMISCHE_ZAHL
.
set
(
RE
(
'(?=[MDCLXVI])M*(C[MD]|D?C*)(X[CL]|L?X*)(I[XV]|V?I*)'
))
ZAHL
.
set
(
RE
(
'
\\
d+'
))
GROSSSCHRIFT
=
RegExp
(
'[A-ZÄÖÜ]+'
)
LAT_WORT
=
RegExp
(
'[a-z|
\\
-]+'
)
DEU_KLEIN
=
RegExp
(
'[a-zäöüßę
\\
-]+'
)
GROSSBUCHSTABE
=
RegExp
(
'[A-ZÄÖÜ](?=[
\\
t
\\
n])'
)
DEU_GROSS
=
RegExp
(
'[A-ZÄÖÜ][a-zäöüßę
\\
-]+'
)
SATZZEICHEN
.
set
(
RE
(
'(?!->)(?:(?:,(?!,))|(?:;(?!;))|(?::(?!:))|[.()
\\
[
\\
]
\\
-]+)'
))
ROEMISCHE_ZAHL
.
set
(
RE
(
'(?=[MDCLXVI])M*(C[MD]|D?C*)(X[CL]|L?X*)(I[XV]|V?I*)(?=[^
\\
w])'
))
ZAHL
.
set
(
RE
(
'[
\\
d_]+'
))
GROSSSCHRIFT
.
set
(
RE
(
'(?!-)[A-ZÄÖÜ_
\\
-]+'
))
LAT_WORT
=
RE
(
'(?!-)[a-z|
\\
-_]+'
)
DEU_KLEIN
=
RE
(
'(?!-)[a-zäöüßę_
\\
-]+'
)
KLEINBUCHSTABE
=
RE
(
'[a-zäöü](?=[
\\
t
\\
n])'
)
GROSSBUCHSTABE
=
RE
(
'[A-ZÄÖÜ](?=[
\\
t
\\
n])'
)
DEU_GROSS
=
RE
(
'[A-ZÄÖÜ][a-zäöüßę_
\\
-]+'
)
DEU_WORT
.
set
(
Alternative
(
DEU_GROSS
,
DEU_KLEIN
,
GROSSBUCHSTABE
))
NAME
=
RE
(
'[A-ZÄÖÜÁÀÓÒÚÙÂÔÛ][a-zäöüßáàâóòôúùû]+'
)
NAMENS_ABKÜRZUNG
=
RE
(
'[A-ZÄÖÜÁÀÂÓÒÔÚÙÛ]
\\
.'
)
Edition
=
Synonym
(
FREITEXT
)
Datierung
=
Synonym
(
FREITEXT
)
Stelle
=
Synonym
(
FREITEXT
)
Werk
=
Synonym
(
FREITEXT
)
Autor
=
Synonym
(
FREITEXT
)
Ziel
Name
=
Synonym
(
EINZEILER
)
VerweisZiel
=
Series
(
Token
(
"{"
),
Ziel
Name
,
Token
(
"}"
))
Verweis
=
Series
(
Token
(
"->"
),
ZielName
,
mandatory
=
1
)
BelegText
=
Series
(
R
E
(
'"'
,
wR
=
''
,
wL
=
WSP__
),
FREITEXT
,
RE
(
'"'
),
Option
(
Token
(
"."
)),
mandatory
=
2
)
Edition
=
Synonym
(
EINZEILER
)
Datierung
=
Synonym
(
EINZEILER
)
Stelle
=
Synonym
(
EINZEILER
)
Werk
=
Synonym
(
EINZEILER
)
Autor
=
Synonym
(
EINZEILER
)
Ziel
ID
=
Synonym
(
FREITEXT
)
Anker
=
Series
(
Token
(
"{"
),
Ziel
ID
,
Token
(
"}"
)
,
mandatory
=
2
)
Verweis
=
Series
(
Token
(
"->"
),
Anker
,
mandatory
=
1
)
BelegText
=
Series
(
R
egExp
(
'"'
),
MEHRZEILER
,
RE
(
'"'
),
Option
(
Token
(
"."
)),
mandatory
=
2
)
BelegQuelle
=
Series
(
Autor
,
DPP
,
Werk
)
Zitat
=
Series
(
BelegQuelle
,
ZeroOrMore
(
Series
(
SEM
,
Stelle
,
BelegText
)),
Option
(
Series
(
Option
(
TR
),
Zusatz
)))
Beleg
=
Alternative
(
Verweis
,
Zitat
)
zusatz_typ
=
Alternative
(
Token
(
"adde"
),
Token
(
"al"
),
Token
(
"sim."
),
Token
(
"saepe"
),
Token
(
"vel-rarius"
),
Token
(
"vel"
),
FREITEXT
)
Zusatz
.
set
(
Series
(
Token
(
"ZUSATZ"
),
OneOrMore
(
Series
(
Option
(
TR
),
zusatz_typ
,
Option
(
Token
(
"."
)))),
mandatory
=
1
))
Quellenangabe
=
Series
(
Option
(
Anker
),
SomeOf
(
BelegQuelle
,
Verweis
))
Zitat
=
Series
(
Quellenangabe
,
ZeroOrMore
(
Series
(
SEM
,
Option
(
ZW
),
Option
(
Anker
),
SomeOf
(
Stelle
,
Verweis
),
Option
(
Series
(
Option
(
ZW
),
BelegText
)))),
Option
(
Series
(
Option
(
TR
),
Zusatz
)))
Beleg
=
Alternative
(
Series
(
Verweis
,
Option
(
Zitat
)),
Zitat
)
Belege
=
Series
(
Option
(
Token
(
"*"
)),
Beleg
,
ZeroOrMore
(
Series
(
Option
(
LZ
),
Token
(
"*"
),
Beleg
)))
zusatz_typ
=
Alternative
(
Token
(
"adde"
),
Token
(
"al"
),
Token
(
"sim."
),
Token
(
"saepe"
),
Token
(
"vel-rarius"
),
Token
(
"vel"
),
EINZEILER
)
Zusatz
.
set
(
Series
(
Token
(
"ZUSATZ"
),
OneOrMore
(
Series
(
Option
(
TR
),
zusatz_typ
)),
mandatory
=
1
))
SCHLUESSELWORT
=
Series
(
OneOrMore
(
Series
(
RE
(
''
),
RegExp
(
'
\\
n'
))),
NegativeLookahead
(
ROEMISCHE_ZAHL
),
RegExp
(
'[A-ZÄÖÜ]{3,}
\\
s+'
))
GRI
=
Alternative
(
Token
(
"GRIECHISCH"
),
Token
(
"GRIECH"
),
Token
(
"GRIE"
),
Token
(
"GRI"
))
DEU
=
Alternative
(
Token
(
"DEUTSCH"
),
Token
(
"DEU"
))
LAT
=
Alternative
(
Token
(
"LATEINISCH"
),
Token
(
"LAT"
))
Name
=
OneOrMore
(
Alternative
(
NAME
,
NAMENS_ABKÜRZUNG
))
ArtikelVerfasser
=
Series
(
Alternative
(
Token
(
"AUTORIN"
),
Token
(
"AUTOR"
)),
Name
)
UnterArtikel
=
Token
(
"UNTER-ARTIKEL"
)
VerweisPosition
=
Token
(
"VERWEISE"
)
Beleg
e
=
Series
(
Token
(
"BELEGE"
),
OneOrMore
(
Series
(
ZWW
,
Token
(
"*"
),
Beleg
)),
ABS
)
ArtikelVerfasser
=
Series
(
ZWW
,
Alternative
(
Token
(
"AUTORIN"
),
Token
(
"AUTOR"
)),
Name
)
UnterArtikel
=
Series
(
ZWW
,
Token
(
"UNTER-ARTIKEL"
)
)
VerweisPosition
=
Series
(
ZWW
,
Token
(
"VERWEISE"
)
)
Beleg
Position
=
Series
(
ZWW
,
Token
(
"BELEGE"
),
ZWW
,
Belege
)
BedeutungsQualifikation
=
Series
(
Token
(
"["
),
EINZEILER
,
ZeroOrMore
(
Series
(
SomeOf
(
SEM
,
ZW
),
EINZEILER
)),
Token
(
"]"
),
mandatory
=
3
)
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
,
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
))
Gegenstand
=
Synonym
(
ZEICHENFOLGE
)
Variante
=
Series
(
NegativeLookahead
(
KATEGORIENZEILE
),
Gegenstand
,
DPP
,
Beleg
)
Varianten
=
Series
(
Variante
,
ZeroOrMore
(
Series
(
ABS
,
Variante
)))