Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
badw-it
DHParser
Commits
7fdfefd8
Commit
7fdfefd8
authored
Nov 20, 2017
by
di68kap
Browse files
- MLW alle Tests repariert!
parent
8cc1d9da
Changes
13
Hide whitespace changes
Inline
Side-by-side
DHParser/parser.py
View file @
7fdfefd8
...
...
@@ -161,7 +161,7 @@ class HistoryRecord:
(
self
.
line_col
[
0
],
self
.
line_col
[
1
],
self
.
stack
,
str
(
self
.
node
))
def
err_msg
(
self
)
->
str
:
return
self
.
ERROR
+
": "
+
"; "
.
join
(
str
(
e
)
for
e
in
self
.
node
.
_errors
).
replace
(
'
\n
'
,
'
\\
'
)
return
self
.
ERROR
+
": "
+
"; "
.
join
(
str
(
e
)
for
e
in
self
.
node
.
_errors
)
#
.replace('\n', '\\')
@
property
def
stack
(
self
)
->
str
:
...
...
@@ -899,7 +899,7 @@ class Grammar:
def
prepare_line
(
record
):
excerpt
=
self
.
document__
.
text
.
__getitem__
(
record
.
extent
)[:
25
].
replace
(
'
\n
'
,
'
\\
n'
)
excerpt
=
"'%s'"
%
excerpt
if
len
(
excerpt
)
<
25
else
"'%s...'"
%
excerpt
return
record
.
stack
,
record
.
status
,
excerpt
return
[
item
for
item
in
(
record
.
stack
,
record
.
status
,
excerpt
)
if
item
]
def
write_log
(
history
,
log_name
):
path
=
os
.
path
.
join
(
log_dir
(),
log_name
+
"_parser.log"
)
...
...
@@ -916,6 +916,8 @@ class Grammar:
if
not
log_file_name
:
name
=
self
.
__class__
.
__name__
log_file_name
=
name
[:
-
7
]
if
name
.
lower
().
endswith
(
'grammar'
)
else
name
elif
log_file_name
.
lower
().
endswith
(
'.log'
):
log_file_name
=
log_file_name
[:
-
4
]
full_history
,
match_history
,
errors_only
=
[],
[],
[]
for
record
in
self
.
history__
:
line
=
"; "
.
join
(
prepare_line
(
record
))
...
...
DHParser/testing.py
View file @
7fdfefd8
...
...
@@ -264,7 +264,7 @@ def grammar_suite(directory, parser_factory, transformer_factory,
err_N
=
0
if
all_errors
:
for
filename
in
all_errors
:
error_report
.
append
(
'Errors found by unit test "%s":'
%
filename
)
error_report
.
append
(
'Errors found by unit test "%s":
\n
'
%
filename
)
err_N
+=
len
(
all_errors
[
filename
])
for
error
in
all_errors
[
filename
]:
error_report
.
append
(
'
\t
'
+
'
\n\t
'
.
join
(
error
.
split
(
'
\n
'
)))
...
...
examples/MLW/Beispiele/facitergula/fascitergula.mlw
View file @
7fdfefd8
...
...
@@ -11,15 +11,15 @@ LEMMA facitergula
GRAMMATIK
nomen; -ae f.
-us, -i m.: v. ibi
-um, -i n.: v. ibi
-us, -i m.:
->
v. ibi
-um, -i n.:
->
v. ibi
SCHREIBWEISE
script.:
vizreg-: -> ID_0023
festregel(a): v. ibi
fezdregl(a): v. ibi
festregel(a):
->
v. ibi
fezdregl(a):
->
v. ibi
BEDEUTUNG
...
...
@@ -34,9 +34,9 @@ BELEGE
* Catal.: thes. Germ.; 18,7 "-eterculi viginti quatuor".
* Libri: confrat. I; 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
e.
"; 6,24 "fasciutercule
VII.";
92,6 "fascercul
e
tres
.
" 21,20 IIII "festregel
e.
"
* {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
ę
"
ZUSATZ saepe.
...
...
examples/MLW/MLW.ebnf
View file @
7fdfefd8
...
...
@@ -36,7 +36,7 @@ LemmaWort = LAT_WORT
LemmaVarianten = [LZ]
{ LemmaVariante §TR }+
[Zusatz]
[Zusatz
§ABS
]
LemmaVariante = LAT_WORT_TEIL { "-" LAT_WORT_TEIL }
...
...
@@ -54,7 +54,7 @@ wortart = "nomen" | "n."
| "praeposition" | "praep."
flexion = deklination | konjugation
deklination = FLEX
§
"," FLEX
deklination = FLEX
[
"," FLEX
]
konjugation = FLEX
FLEX = /-?[a-z]+/~
...
...
@@ -62,7 +62,7 @@ genus = "maskulinum" | "m."
| "femininum" | "f."
| "neutrum" | "n."
GrammatikVariante = [wortart ABS] flexion [genus] DPP { Beleg }+
GrammatikVariante = [wortart ABS] flexion [genus] DPP { Beleg }+
# Beleg { SEM Beleg }
...
...
@@ -74,66 +74,31 @@ EtymologieBesonderheit = FREITEXT
Etymologie = FREITEXT
#### ARTIKEL-KOPF ############################################################
ArtikelKopf = < SchreibweisenPosition | StrukturPosition | GebrauchPosition
| MetrikPosition | VerwechselungsPosition >
## Schreibweisen-Position ##
# TODO: Ggf. noch zu ergänzen um: Zusatz, Mehrere Tyen innerhalb der Schreibweisen-Position.
SchreibweisenPosition = "SCHREIBWEISE" [LZ] { SWKategorie }+
SWKategorie = SWTyp §DPP [LZ] ( Varianten | { SWKategorie }+ ) [LZ]
SWTyp = scriptfat | scriptform | script | form | gen | abl | FREITEXT
scriptfat = "script." "fat-"
scriptform = "script. " "form"
script = "srcipt."
form = "form"
gen = "gen."
abl = "abl."
#### STRUKTUR-POSITION #######################################################
StrukturPosition = "STRUKTUR" [LZ] §{ STKategorie }+
STKategorie = STTyp §DPP [LZ] ( Varianten | { STKategorie }+ ) [LZ]
STTyp = ZEICHENFOLGE
ArtikelKopf = < SchreibweisenPosition
| StrukturPosition
| GebrauchPosition
| MetrikPosition
| VerwechselungPosition >
SchreibweisenPosition = "SCHREIBWEISE" Position
StrukturPosition = "STRUKTUR" Position
GebrauchPosition = "GEBRAUCH" Position
MetrikPosition = "METRIK" Position
VerwechselungPosition = "VERWECHSELBAR" Position
##
##
GEBRAUCH-
POSITION ##
#####################################################
##
ARTIKELKOPF
POSITION
EN
##
GebrauchPosition = "GEBRAUCH" [LZ] §{ GBKategorie }+
GBKategorie = GBTyp §DPP [LZ] ( Varianten | { GBKategorie }+ ) [LZ]
GBTyp = ZEICHENFOLGE
#### METRIK-POSITION #########################################################
MetrikPosition = "METRIK" [LZ] §{ MTKategorie }+
MTKategorie = MTTyp §DPP [LZ] ( Varianten | { MTKategorie }+ ) [LZ]
MTTyp = ZEICHENFOLGE
#### VERWECHSLUNGS-POSITION ##################################################
VerwechselungsPosition = "VERWECHSELBAR" [LZ] §{ VWKategorie }+
VWKategorie = VWTyp §DPP [LZ] ( Varianten | { VWKategorie }+ ) [LZ]
VWTyp = ZEICHENFOLGE
#### ARTIKELKOPF POSITIONEN VARIANTEN ########################################
Varianten = Variante { ABS Variante }
Variante = !KATEGORIENZEILE Gegenstand DPP Beleg
Gegenstand = ZEICHENFOLGE
Position = [LZ] §{ Kategorie }+
Kategorie = Besonderheit §DPP [LZ] ( Varianten | { Kategorie }+ ) [LZ]
Besonderheit = FREITEXT
Varianten = Variante { ABS Variante }
Variante = !KATEGORIENZEILE Gegenstand DPP Beleg
Gegenstand = ZEICHENFOLGE
#### BEDEUTUNGS-POSITION #####################################################
##############################################################################
BedeutungsPosition = { "BEDEUTUNG" [LZ] §Bedeutung }+
...
...
@@ -143,8 +108,7 @@ Interpretamente = LateinischeBedeutung [LZ] §DeutscheBedeutung [LZ]
LateinischeBedeutung = LAT /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~
DeutscheBedeutung = DEU /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~
Belege = "BELEGE" [LZ] (EinBeleg | { "*" EinBeleg }) ABS
EinBeleg = { !([LZ] "*" | SCHLUESSELWORT) /\s*[^\n]*/~ [ZW] }+ [Zusatz]
Belege = "BELEGE" { ZWW "*" Beleg }+ ABS
#### VERWEIS-POSITION #####################################################
...
...
@@ -176,16 +140,17 @@ SCHLUESSELWORT = { //~ /\n/ }+ !ROEMISCHE_ZAHL /[A-ZÄÖÜ]{3,}\s+/
#### ZUSATZ an verschiedenen Stellen der Struktur ############################
Zusatz = "ZUSATZ" §{ zusatz_typ [
TR
] }+
Zusatz = "ZUSATZ" §{
[TR]
zusatz_typ [
"."
] }+
zusatz_typ = "adde" | "al" | "sim." | "saepe" | "vel-rarius" | "vel" | FREITEXT
#### BELEGE ##################################################################
Beleg = (BelegQuelle BelegText) | BelegText | Verweis
BelegQuelle = Autor DPP Werk SEM Stelle [SEM Datierung] [SEM Edition]
BelegText = '"' FREITEXT '"'
Beleg = Verweis | Zitat
Zitat = BelegQuelle { SEM Stelle BelegText } [[TR] Zusatz]
BelegQuelle = Autor DPP Werk
BelegText = ~/"/ FREITEXT /"/~ ["."]
Verweis = "->" ZielName
VerweisZiel = "{" ZielName "}"
...
...
@@ -203,20 +168,21 @@ Edition = FREITEXT
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äöüß]+/~
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]+/~
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*)/~
SATZZEICHEN = /(?:,(?!,))|(?:;(?!;))|(?::(?!:))|[.()\-]+/~ # div. Satzzeichen, aber keine doppelten ,, ;; oder ::
SATZZEICHEN = /(?:,(?!,))|(?:;(?!;))|(?::(?!:))|[.()\
[\]\
-]+/~ # div. Satzzeichen, aber keine doppelten ,, ;; oder ::
TEXTELEMENT = DEU_WORT | ZAHL | ROEMISCHE_ZAHL
FREITEXT = { TEXTELEMENT | /[.()\-\s]+/ | /,(?!,)\s*/ }+
ERW_FREITEXT = { TEXTELEMENT | SATZZEICHEN | /\s+/ }+
FREITEXT =
!ZEILENSPRUNG
{ TEXTELEMENT | /[.()\
[\]\
-\s]+/ | /,(?!,)\s*/ }+
ERW_FREITEXT =
!ZEILENSPRUNG
{ TEXTELEMENT | SATZZEICHEN | /\s+/ }+
BUCHSTABENFOLGE = /\w+/~
ZEICHENFOLGE = /[\w()-]+/~
...
...
examples/MLW/MLWCompiler.py
View file @
7fdfefd8
...
...
@@ -88,7 +88,7 @@ class MLWGrammar(Grammar):
LemmaVarianten = [LZ]
{ LemmaVariante §TR }+
[Zusatz]
[Zusatz
§ABS
]
LemmaVariante = LAT_WORT_TEIL { "-" LAT_WORT_TEIL }
...
...
@@ -106,7 +106,7 @@ class MLWGrammar(Grammar):
| "praeposition" | "praep."
flexion = deklination | konjugation
deklination = FLEX
§
"," FLEX
deklination = FLEX
[
"," FLEX
]
konjugation = FLEX
FLEX = /-?[a-z]+/~
...
...
@@ -114,7 +114,7 @@ class MLWGrammar(Grammar):
| "femininum" | "f."
| "neutrum" | "n."
GrammatikVariante = [wortart ABS] flexion [genus] DPP { Beleg }+
GrammatikVariante = [wortart ABS] flexion [genus] DPP { Beleg }+
# Beleg { SEM Beleg }
...
...
@@ -126,66 +126,31 @@ class MLWGrammar(Grammar):
Etymologie = FREITEXT
#### ARTIKEL-KOPF ############################################################
ArtikelKopf = < SchreibweisenPosition | StrukturPosition | GebrauchPosition
| MetrikPosition | VerwechselungsPosition >
## Schreibweisen-Position ##
# TODO: Ggf. noch zu ergänzen um: Zusatz, Mehrere Tyen innerhalb der Schreibweisen-Position.
SchreibweisenPosition = "SCHREIBWEISE" [LZ] { SWKategorie }+
SWKategorie = SWTyp §DPP [LZ] ( Varianten | { SWKategorie }+ ) [LZ]
SWTyp = scriptfat | scriptform | script | form | gen | abl | FREITEXT
scriptfat = "script." "fat-"
scriptform = "script. " "form"
script = "srcipt."
form = "form"
gen = "gen."
abl = "abl."
#### STRUKTUR-POSITION #######################################################
StrukturPosition = "STRUKTUR" [LZ] §{ STKategorie }+
STKategorie = STTyp §DPP [LZ] ( Varianten | { STKategorie }+ ) [LZ]
STTyp = ZEICHENFOLGE
ArtikelKopf = < SchreibweisenPosition
| StrukturPosition
| GebrauchPosition
| MetrikPosition
| VerwechselungPosition >
SchreibweisenPosition = "SCHREIBWEISE" Position
StrukturPosition = "STRUKTUR" Position
GebrauchPosition = "GEBRAUCH" Position
MetrikPosition = "METRIK" Position
VerwechselungPosition = "VERWECHSELBAR" Position
##
## GEBRAUCH-
POSITION ##
#####################################################
##
ARTIKELKOPF
POSITION
EN
##
GebrauchPosition = "GEBRAUCH" [LZ] §{ GBKategorie }+
GBKategorie = GBTyp §DPP [LZ] ( Varianten | { GBKategorie }+ ) [LZ]
GBTyp = ZEICHENFOLGE
#### METRIK-POSITION #########################################################
MetrikPosition = "METRIK" [LZ] §{ MTKategorie }+
MTKategorie = MTTyp §DPP [LZ] ( Varianten | { MTKategorie }+ ) [LZ]
MTTyp = ZEICHENFOLGE
#### VERWECHSLUNGS-POSITION ##################################################
VerwechselungsPosition = "VERWECHSELBAR" [LZ] §{ VWKategorie }+
VWKategorie = VWTyp §DPP [LZ] ( Varianten | { VWKategorie }+ ) [LZ]
VWTyp = ZEICHENFOLGE
#### ARTIKELKOPF POSITIONEN VARIANTEN ########################################
Varianten = Variante { ABS Variante }
Variante = !KATEGORIENZEILE Gegenstand DPP Beleg
Gegenstand = ZEICHENFOLGE
Position = [LZ] §{ Kategorie }+
Kategorie = Besonderheit §DPP [LZ] ( Varianten | { Kategorie }+ ) [LZ]
Besonderheit = FREITEXT
Varianten = Variante { ABS Variante }
Variante = !KATEGORIENZEILE Gegenstand DPP Beleg
Gegenstand = ZEICHENFOLGE
#### BEDEUTUNGS-POSITION #####################################################
##############################################################################
BedeutungsPosition = { "BEDEUTUNG" [LZ] §Bedeutung }+
...
...
@@ -195,8 +160,7 @@ class MLWGrammar(Grammar):
LateinischeBedeutung = LAT /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~
DeutscheBedeutung = DEU /(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+/~
Belege = "BELEGE" [LZ] (EinBeleg | { "*" EinBeleg }) ABS
EinBeleg = { !([LZ] "*" | SCHLUESSELWORT) /\s*[^\n]*/~ [ZW] }+ [Zusatz]
Belege = "BELEGE" { ZWW "*" Beleg }+ ABS
#### VERWEIS-POSITION #####################################################
...
...
@@ -228,16 +192,17 @@ class MLWGrammar(Grammar):
#### ZUSATZ an verschiedenen Stellen der Struktur ############################
Zusatz = "ZUSATZ" §{ zusatz_typ [
TR
] }+
Zusatz = "ZUSATZ" §{
[TR]
zusatz_typ [
"."
] }+
zusatz_typ = "adde" | "al" | "sim." | "saepe" | "vel-rarius" | "vel" | FREITEXT
#### BELEGE ##################################################################
Beleg = (BelegQuelle BelegText) | BelegText | Verweis
BelegQuelle = Autor DPP Werk SEM Stelle [SEM Datierung] [SEM Edition]
BelegText = '"' FREITEXT '"'
Beleg = Verweis | Zitat
Zitat = BelegQuelle { SEM Stelle BelegText } [[TR] Zusatz]
BelegQuelle = Autor DPP Werk
BelegText = ~/"/ FREITEXT /"/~ ["."]
Verweis = "->" ZielName
VerweisZiel = "{" ZielName "}"
...
...
@@ -255,20 +220,21 @@ class MLWGrammar(Grammar):
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äöüß]+/~
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]+/~
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*)/~
SATZZEICHEN = /(?:,(?!,))|(?:;(?!;))|(?::(?!:))|[.()\-]+/~ # div. Satzzeichen, aber keine doppelten ,, ;; oder ::
SATZZEICHEN = /(?:,(?!,))|(?:;(?!;))|(?::(?!:))|[.()\
[\]\
-]+/~ # div. Satzzeichen, aber keine doppelten ,, ;; oder ::
TEXTELEMENT = DEU_WORT | ZAHL | ROEMISCHE_ZAHL
FREITEXT = { TEXTELEMENT | /[.()\-\s]+/ | /,(?!,)\s*/ }+
ERW_FREITEXT = { TEXTELEMENT | SATZZEICHEN | /\s+/ }+
FREITEXT =
!ZEILENSPRUNG
{ TEXTELEMENT | /[.()\
[\]\
-\s]+/ | /,(?!,)\s*/ }+
ERW_FREITEXT =
!ZEILENSPRUNG
{ TEXTELEMENT | SATZZEICHEN | /\s+/ }+
BUCHSTABENFOLGE = /\w+/~
ZEICHENFOLGE = /[\w()-]+/~
...
...
@@ -297,19 +263,16 @@ class MLWGrammar(Grammar):
DUMMY = "EBNF-Grammatik an dieser Stelle noch nicht definiert!"
"""
DEU_WORT
=
Forward
()
GBKategorie
=
Forward
()
MTKategorie
=
Forward
()
Kategorie
=
Forward
()
ROEMISCHE_ZAHL
=
Forward
()
SATZZEICHEN
=
Forward
()
STKategorie
=
Forward
()
SWKategorie
=
Forward
()
TEXTELEMENT
=
Forward
()
VWKategorie
=
Forward
()
ZAHL
=
Forward
()
Zusatz
=
Forward
()
flexion
=
Forward
()
genus
=
Forward
()
wortart
=
Forward
()
source_hash__
=
"
1b6cf564c748b80f149503b3650c7ccd
"
source_hash__
=
"
3e563592ce262f34a151a9f65f997b6b
"
parser_initialization__
=
"upon instantiation"
COMMENT__
=
r
'#.*'
WHITESPACE__
=
r
'[\t ]*'
...
...
@@ -335,18 +298,19 @@ class MLWGrammar(Grammar):
TR
=
Alternative
(
ABS
,
LZ
)
ZEICHENFOLGE
=
RE
(
'[
\\
w()-]+'
)
BUCHSTABENFOLGE
=
RE
(
'
\\
w+'
)
ERW_FREITEXT
=
OneOrMore
(
Alternative
(
TEXTELEMENT
,
SATZZEICHEN
,
RegExp
(
'
\\
s+'
)))
FREITEXT
=
OneOrMore
(
Alternative
(
TEXTELEMENT
,
RegExp
(
'[.()
\\
-
\\
s]+'
),
RegExp
(
',(?!,)
\\
s*'
)))
ERW_FREITEXT
=
Series
(
NegativeLookahead
(
ZEILENSPRUNG
),
OneOrMore
(
Alternative
(
TEXTELEMENT
,
SATZZEICHEN
,
RegExp
(
'
\\
s+'
)))
)
FREITEXT
=
Series
(
NegativeLookahead
(
ZEILENSPRUNG
),
OneOrMore
(
Alternative
(
TEXTELEMENT
,
RegExp
(
'[.()
\\
[
\\
]
\\
-
\\
s]+'
),
RegExp
(
',(?!,)
\\
s*'
)))
)
TEXTELEMENT
.
set
(
Alternative
(
DEU_WORT
,
ZAHL
,
ROEMISCHE_ZAHL
))
SATZZEICHEN
.
set
(
RE
(
'(?:,(?!,))|(?:;(?!;))|(?::(?!:))|[.()
\\
-]+'
))
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
=
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
.
set
(
RE
(
'[A-ZÄÖÜ]?[a-zäöüß]+'
))
DEU_KLEIN
=
RE
(
'[a-zäöüßę]+'
)
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
)
...
...
@@ -357,11 +321,12 @@ class MLWGrammar(Grammar):
ZielName
=
Synonym
(
BUCHSTABENFOLGE
)
VerweisZiel
=
Series
(
Token
(
"{"
),
ZielName
,
Token
(
"}"
))
Verweis
=
Series
(
Token
(
"->"
),
ZielName
)
BelegText
=
Series
(
Token
(
'"'
),
FREITEXT
,
Token
(
'"'
))
BelegQuelle
=
Series
(
Autor
,
DPP
,
Werk
,
SEM
,
Stelle
,
Option
(
Series
(
SEM
,
Datierung
)),
Option
(
Series
(
SEM
,
Edition
)))
Beleg
=
Alternative
(
Series
(
BelegQuelle
,
BelegText
),
BelegText
,
Verweis
)
BelegText
=
Series
(
RE
(
'"'
,
wR
=
''
,
wL
=
WSP__
),
FREITEXT
,
RE
(
'"'
),
Option
(
Token
(
"."
)))
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
=
Series
(
Token
(
"ZUSATZ"
),
OneOrMore
(
Series
(
zusatz_typ
,
Option
(
T
R
))),
mandatory
=
1
)
Zusatz
.
set
(
Series
(
Token
(
"ZUSATZ"
),
OneOrMore
(
Series
(
Option
(
TR
),
zusatz_typ
,
Option
(
T
oken
(
"."
)
))),
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"
))
...
...
@@ -370,8 +335,7 @@ class MLWGrammar(Grammar):
ArtikelVerfasser
=
Series
(
Alternative
(
Token
(
"AUTORIN"
),
Token
(
"AUTOR"
)),
Name
)
UnterArtikel
=
Token
(
"UNTER-ARTIKEL"
)
VerweisPosition
=
Token
(
"VERWEISE"
)
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
)
Belege
=
Series
(
Token
(
"BELEGE"
),
OneOrMore
(
Series
(
ZWW
,
Token
(
"*"
),
Beleg
)),
ABS
)
DeutscheBedeutung
=
Series
(
DEU
,
RE
(
'(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+'
))
LateinischeBedeutung
=
Series
(
LAT
,
RE
(
'(?:(?![A-ZÄÖÜ][A-ZÄÖÜ]).)+'
))
Interpretamente
=
Series
(
LateinischeBedeutung
,
Option
(
LZ
),
DeutscheBedeutung
,
Option
(
LZ
),
mandatory
=
2
)
...
...
@@ -381,28 +345,15 @@ class MLWGrammar(Grammar):
Gegenstand
=
Synonym
(
ZEICHENFOLGE
)
Variante
=
Series
(
NegativeLookahead
(
KATEGORIENZEILE
),
Gegenstand
,
DPP
,
Beleg
)
Varianten
=
Series
(
Variante
,
ZeroOrMore
(
Series
(
ABS
,
Variante
)))
VWTyp
=
Synonym
(
ZEICHENFOLGE
)
VWKategorie
.
set
(
Series
(
VWTyp
,
DPP
,
Option
(
LZ
),
Alternative
(
Varianten
,
OneOrMore
(
VWKategorie
)),
Option
(
LZ
),
mandatory
=
1
))
VerwechselungsPosition
=
Series
(
Token
(
"VERWECHSELBAR"
),
Option
(
LZ
),
OneOrMore
(
VWKategorie
),
mandatory
=
2
)
MTTyp
=
Synonym
(
ZEICHENFOLGE
)
MTKategorie
.
set
(
Series
(
MTTyp
,
DPP
,
Option
(
LZ
),
Alternative
(
Varianten
,
OneOrMore
(
MTKategorie
)),
Option
(
LZ
),
mandatory
=
1
))
MetrikPosition
=
Series
(
Token
(
"METRIK"
),
Option
(
LZ
),
OneOrMore
(
MTKategorie
),
mandatory
=
2
)
GBTyp
=
Synonym
(
ZEICHENFOLGE
)
GBKategorie
.
set
(
Series
(
GBTyp
,
DPP
,
Option
(
LZ
),
Alternative
(
Varianten
,
OneOrMore
(
GBKategorie
)),
Option
(
LZ
),
mandatory
=
1
))
GebrauchPosition
=
Series
(
Token
(
"GEBRAUCH"
),
Option
(
LZ
),
OneOrMore
(
GBKategorie
),
mandatory
=
2
)
STTyp
=
Synonym
(
ZEICHENFOLGE
)
STKategorie
.
set
(
Series
(
STTyp
,
DPP
,
Option
(
LZ
),
Alternative
(
Varianten
,
OneOrMore
(
STKategorie
)),
Option
(
LZ
),
mandatory
=
1
))
StrukturPosition
=
Series
(
Token
(
"STRUKTUR"
),
Option
(
LZ
),
OneOrMore
(
STKategorie
),
mandatory
=
2
)
abl
=
Token
(
"abl."
)
gen
=
Token
(
"gen."
)
form
=
Token
(
"form"
)
script
=
Token
(
"srcipt."
)
scriptform
=
Series
(
Token
(
"script. "
),
Token
(
"form"
))
scriptfat
=
Series
(
Token
(
"script."
),
Token
(
"fat-"
))
SWTyp
=
Alternative
(
scriptfat
,
scriptform
,
script
,
form
,
gen
,
abl
,
FREITEXT
)
SWKategorie
.
set
(
Series
(
SWTyp
,
DPP
,
Option
(
LZ
),
Alternative
(
Varianten
,
OneOrMore
(
SWKategorie
)),
Option
(
LZ
),
mandatory
=
1
))
SchreibweisenPosition
=
Series
(
Token
(
"SCHREIBWEISE"
),
Option
(
LZ
),
OneOrMore
(
SWKategorie
))
ArtikelKopf
=
SomeOf
(
SchreibweisenPosition
,
StrukturPosition
,
GebrauchPosition
,
MetrikPosition
,
VerwechselungsPosition
)
Besonderheit
=
Synonym
(
FREITEXT
)
Kategorie
.
set
(
Series
(
Besonderheit
,
DPP
,
Option
(
LZ
),
Alternative
(
Varianten
,
OneOrMore
(
Kategorie
)),
Option
(
LZ
),
mandatory
=
1
))
Position
=
Series
(
Option
(
LZ
),
OneOrMore
(
Kategorie
),
mandatory
=
1
)
VerwechselungPosition
=
Series
(
Token
(
"VERWECHSELBAR"
),
Position
)
MetrikPosition
=
Series
(
Token
(
"METRIK"
),
Position
)
GebrauchPosition
=
Series
(
Token
(
"GEBRAUCH"
),
Position
)
StrukturPosition
=
Series
(
Token
(
"STRUKTUR"
),
Position
)
SchreibweisenPosition
=
Series
(
Token
(
"SCHREIBWEISE"
),
Position
)
ArtikelKopf
=
SomeOf
(
SchreibweisenPosition
,
StrukturPosition
,
GebrauchPosition
,
MetrikPosition
,
VerwechselungPosition
)
Etymologie
=
Synonym
(
FREITEXT
)
EtymologieBesonderheit
=
Synonym
(
FREITEXT
)
EtymologieVariante
=
Alternative
(
LAT
,
Series
(
GRI
,
Option
(
EtymologieBesonderheit
),
Option
(
Series
(
Token
(
"ETYM"
),
Etymologie
)),
DPP
,
Beleg
))
...
...
@@ -411,13 +362,13 @@ class MLWGrammar(Grammar):
genus
.
set
(
Alternative
(
Token
(
"maskulinum"
),
Token
(
"m."
),
Token
(
"femininum"
),
Token
(
"f."
),
Token
(
"neutrum"
),
Token
(
"n."
)))
FLEX
=
RE
(
'-?[a-z]+'
)
konjugation
=
Synonym
(
FLEX
)
deklination
=
Series
(
FLEX
,
Token
(
","
),
FLEX
,
mandatory
=
1
)
deklination
=
Series
(
FLEX
,
Option
(
Series
(
Token
(
","
),
FLEX
))
)
flexion
.
set
(
Alternative
(
deklination
,
konjugation
))
wortart
.
set
(
Alternative
(
Token
(
"nomen"
),
Token
(
"n."
),
Token
(
"verb"
),
Token
(
"v."
),
Token
(
"adverb"
),
Token
(
"adv."
),
Token
(
"adjektiv"
),
Token
(
"adj."
),
Token
(
"praeposition"
),
Token
(
"praep."
)))
Grammatik
=
Series
(
wortart
,
ABS
,
flexion
,
Option
(
genus
),
mandatory
=
1
)
GrammatikPosition
=
Series
(
Token
(
"GRAMMATIK"
),
Option
(
LZ
),
Grammatik
,
ABS
,
ZeroOrMore
(
Series
(
GrammatikVariante
,
ABS
,
mandatory
=
1
)),
mandatory
=
2
)
LemmaVariante
=
Series
(
LAT_WORT_TEIL
,
ZeroOrMore
(
Series
(
Token
(
"-"
),
LAT_WORT_TEIL
)))
LemmaVarianten
=
Series
(
Option
(
LZ
),
OneOrMore
(
Series
(
LemmaVariante
,
TR
,
mandatory
=
1
)),
Option
(
Zusatz
))
LemmaVarianten
=
Series
(
Option
(
LZ
),
OneOrMore
(
Series
(
LemmaVariante
,
TR
,
mandatory
=
1
)),
Option
(
Series
(
Zusatz
,
ABS
,
mandatory
=
1
)
))
LemmaWort
=
Synonym
(
LAT_WORT
)
gesichert
=
Token
(
"$"
)
klassisch
=
Token
(
"*"
)
...
...
examples/MLW/MLW_ebnf_ERRORS.txt
View file @
7fdfefd8
line: 191, column: 1, Warning: Rule "VerweisZiel" is not connected to parser root "Artikel" !
line: 207, column: 1, Warning: Rule "DEU_GROSS" is not connected to parser root "Artikel" !
line: 208, column: 1, Warning: Rule "DEU_KLEIN" is not connected to parser root "Artikel" !
line: 211, column: 1, Warning: Rule "GROSSSCHRIFT" is not connected to parser root "Artikel" !
line: 215, column: 1, Warning: Rule "SATZZEICHEN" is not connected to parser root "Artikel" !
line: 219, column: 1, Warning: Rule "ERW_FREITEXT" is not connected to parser root "Artikel" !
line: 236, column: 1, Warning: Rule "RZS" is not connected to parser root "Artikel" !
line: 243, column: 1, Warning: Rule "NIEMALS" is not connected to parser root "Artikel" !
line: 245, column: 1, Warning: Rule "DUMMY" is not connected to parser root "Artikel" !
line: 137, column: 1, Warning: Rule "SCHLUESSELWORT" is not connected to parser root "Artikel" !
line: 156, column: 1, Warning: Rule "VerweisZiel" is not connected to parser root "Artikel" !
line: 162, column: 1, Warning: Rule "Datierung" is not connected to parser root "Artikel" !
line: 163, column: 1, Warning: Rule "Edition" is not connected to parser root "Artikel" !
line: 177, column: 1, Warning: Rule "GROSSSCHRIFT" is not connected to parser root "Artikel" !
line: 181, column: 1, Warning: Rule "SATZZEICHEN" is not connected to parser root "Artikel" !
line: 185, column: 1, Warning: Rule "ERW_FREITEXT" is not connected to parser root "Artikel" !
line: 197, column: 1, Warning: Rule "ZW" is not connected to parser root "Artikel" !
line: 199, column: 1, Warning: Rule "LÜCKE" is not connected to parser root "Artikel" !
line: 201, column: 1, Warning: Rule "LEERZEILE" is not connected to parser root "Artikel" !
line: 202, column: 1, Warning: Rule "RZS" is not connected to parser root "Artikel" !
line: 205, column: 1, Warning: Rule "KOMMENTARZEILEN" is not connected to parser root "Artikel" !
line: 209, column: 1, Warning: Rule "NIEMALS" is not connected to parser root "Artikel" !
line: 211, column: 1, Warning: Rule "DUMMY" is not connected to parser root "Artikel" !
examples/MLW/Zieldatenformat/MLW-DTD_2017-11-03.dtd
0 → 100644
View file @
7fdfefd8
<?xml version="1.0" encoding="UTF-8"?>
<!-- DTD für MLW Erfassung neuer Artikel -->
<!-- erstellt von Ursula Welsch, BADW -->
<!-- Stand: 6.7.2017 -->
<!-- Parameter-Entities -->
<!ENTITY % textauszeichnungen "kursiv | gesperrt | gerade" >
<!ENTITY % gesichert "gesichert (ja | nein) 'ja'" >
<!-- Lexikon -->
<!ELEMENT MLW-test (artikel)+ >
<!-- Artikel -->
<!ELEMENT artikel (lemma-position, artikelkopf?, bedeutung-position, verweis-position?, sub-artikel*, artikel-verfasser) >
<!ATTLIST artikel xml:id ID #REQUIRED >
<!-- =========================-->
<!-- Lemma-Ansatz -->
<!-- =========================-->
<!ELEMENT lemma-position (((lemma, lemma-varianten?, grammatik-position?) | ((lemma-position | zusatz), lemma-varianten?, grammatik-position?)+), etymologie-position?) >
<!ATTLIST lemma-position nr CDATA #IMPLIED >
<!-- Lemma -->
<!ELEMENT lemma (#PCDATA) >
<!ATTLIST lemma
klassisch (ja | nein) "ja"
gesichert (ja | nein) "ja"
>
<!-- Lemma-Varianten -->
<!ELEMENT lemma-varianten (lemma-variante+, zusatz?) >
<!ELEMENT lemma-variante (#PCDATA) >
<!ATTLIST lemma-variante kurz CDATA #IMPLIED >
<!-- Grammatik-Position -->
<!ELEMENT grammatik-position (grammatik, grammatik-varianten?) >
<!-- Grammatikangaben -->
<!ELEMENT grammatik (#PCDATA) >
<!ATTLIST grammatik
wortart (adverb | adjektiv | interjektion | numerale | partikel | praeposition | pronomen | substantiv | verb) #REQUIRED
klasse-substantiv (I | II | III | IV | V | anormal) #IMPLIED
klasse-adjektiv (I-II | III | anormal) #IMPLIED
genus (m | f | n | m-n | m-f | m-f-raro | m-f-rarius) #IMPLIED
klasse-verb (I | II | III | IV | anormal) #IMPLIED
>
<!-- genus m-n = m. vel n. -->
<!-- Grammatik-Varianten -->
<!ELEMENT grammatik-varianten (grammatik-variante+) >
<!ELEMENT grammatik-variante (grammatik, beleg+) >
<!-- Etymologie-Position -->
<!ELEMENT etymologie-position (#PCDATA | etymologie-angabe | verweis)* >
<!ELEMENT etymologie-angabe (#PCDATA) >
<!ATTLIST etymologie-angabe
sprache (griech | francogal | ital | lat-klass | lat-mlw | lat-erschlossen) "lat-klass"