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
cfa4f59a
Commit
cfa4f59a
authored
Dec 18, 2017
by
di68kap
Browse files
- MLW ergänzt...
parent
1100df44
Changes
7
Expand all
Hide whitespace changes
Inline
Side-by-side
DHParser/parser.py
View file @
cfa4f59a
...
...
@@ -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'
)
...
...
DHParser/transform.py
View file @
cfa4f59a
...
...
@@ -373,12 +373,11 @@ def replace_or_reduce(context: List[Node], condition: Callable=is_named):
"""
node
=
context
[
-
1
]
if
len
(
node
.
children
)
==
1
:
c
ontext
.
append
(
node
.
children
[
0
]
)
c
hild
=
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
...
...
examples/MLW/Beispiele/imperium/imperium.mlw
View file @
cfa4f59a
This diff is collapsed.
Click to expand it.
examples/MLW/MLW.ebnf
View file @
cfa4f59a
...
...
@@ -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 }+
...
...
examples/MLW/MLWCompiler.py
View file @
cfa4f59a
...
...
@@ -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
=
S
ynonym
(
EINZEILER
)
Werk
=
AllOf
(
EINZEILER
,
Option
(
SomeOf
(
Anker
,
Verweis
,
Zusatz
))
)
Autor
=
S
eries
(
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
))
...
...
examples/MLW/grammar_tests/08_test_belege.ini
View file @
cfa4f59a
...
...
@@ -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.""""
...
...
examples/MLW/verarbeite_Beispiele.py
View file @
cfa4f59a
...
...
@@ -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
):
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment