Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
9.2.2023: Due to updates GitLab will be unavailable for some minutes between 9:00 and 11:00.
Open sidebar
badw-it
DHParser
Commits
a9dd76b8
Commit
a9dd76b8
authored
Jul 10, 2018
by
di68kap
Browse files
- bugs fixed
parent
4b9b6c8a
Changes
3
Hide whitespace changes
Inline
Side-by-side
DHParser/parse.py
View file @
a9dd76b8
...
...
@@ -243,7 +243,7 @@ class Parser(ParserBase):
# add "aspect oriented" wrapper around parser calls
# for memoizing, left recursion and tracing
if
not
isinstance
(
self
,
Forward
):
# should Forward-Parser no be guarded? Not sure...
if
not
isinstance
(
self
,
Forward
):
# should Forward-Parser no
t
be guarded? Not sure...
guarded_parser_call
=
add_parser_guard
(
self
.
__class__
.
__call__
)
# The following check is necessary for classes that don't override
# the __call__() method, because in these cases the non-overridden
...
...
@@ -260,7 +260,7 @@ class Parser(ParserBase):
"""
duplicate
=
self
.
__class__
()
duplicate
.
name
=
self
.
name
duplicate
.
ptype
=
self
.
ptype
#
duplicate.ptype =
self.ptype
return
duplicate
def
reset
(
self
):
...
...
@@ -560,11 +560,9 @@ class Grammar:
...
symbol = _RE('(?!
\\
d)
\\
w+')
After the call of this method symbol.name == "symbol"
holds. Names assigned via the ``name``-parameter of the
constructor will not be overwritten. Parser names starting or
ending with a double underscore like ``root__`` will be
ignored. See :func:`sane_parser_name()`
After the call of this method symbol.name == "symbol" holds.
Parser names starting or ending with a double underscore like
``root__`` will be ignored. See :func:`sane_parser_name()`
This is done only once, upon the first instantiation of the
grammar class!
...
...
@@ -579,10 +577,11 @@ class Grammar:
cdict
=
cls
.
__dict__
for
entry
,
parser
in
cdict
.
items
():
if
isinstance
(
parser
,
Parser
)
and
sane_parser_name
(
entry
):
if
not
parser
.
name
:
if
isinstance
(
parser
,
Forward
):
if
not
cast
(
Forward
,
parser
).
parser
.
name
:
cast
(
Forward
,
parser
).
parser
.
name
=
entry
else
:
# if not parser.name:
parser
.
name
=
entry
if
isinstance
(
parser
,
Forward
)
and
(
not
cast
(
Forward
,
parser
).
parser
.
name
):
cast
(
Forward
,
parser
).
parser
.
_name
=
entry
cls
.
parser_initialization__
=
"done"
...
...
@@ -683,7 +682,8 @@ class Grammar:
assert
parser
.
name
not
in
self
.
__dict__
or
\
isinstance
(
self
.
__dict__
[
parser
.
name
],
parser
.
__class__
),
\
(
'Cannot add parser "%s" because a field with the same name '
'already exists in grammar object!'
%
parser
.
name
)
'already exists in grammar object: %s!'
%
(
parser
.
name
,
str
(
self
.
__dict__
[
parser
.
name
])))
setattr
(
self
,
parser
.
name
,
parser
)
self
.
all_parsers__
.
add
(
parser
)
parser
.
grammar
=
self
...
...
@@ -908,7 +908,7 @@ class PlainText(Parser):
def
__deepcopy__
(
self
,
memo
):
duplicate
=
self
.
__class__
(
self
.
text
)
duplicate
.
name
=
self
.
name
duplicate
.
ptype
=
self
.
ptype
#
duplicate.ptype =
self.ptype
return
duplicate
def
__call__
(
self
,
text
:
StringView
)
->
Tuple
[
Optional
[
Node
],
StringView
]:
...
...
@@ -952,7 +952,7 @@ class RegExp(Parser):
regexp
=
self
.
regexp
.
pattern
duplicate
=
self
.
__class__
(
regexp
)
duplicate
.
name
=
self
.
name
duplicate
.
ptype
=
self
.
ptype
#
duplicate.ptype =
self.ptype
return
duplicate
def
__call__
(
self
,
text
:
StringView
)
->
Tuple
[
Optional
[
Node
],
StringView
]:
...
...
@@ -1077,7 +1077,7 @@ class _RE(Parser):
regexp
=
self
.
main
.
regexp
.
pattern
duplicate
=
self
.
__class__
(
regexp
,
self
.
rx_wsl
,
self
.
rx_wsr
)
duplicate
.
name
=
self
.
name
duplicate
.
ptype
=
self
.
ptype
#
duplicate.ptype =
self.ptype
return
duplicate
def
__call__
(
self
,
text
:
StringView
)
->
Tuple
[
Optional
[
Node
],
StringView
]:
...
...
@@ -1140,7 +1140,7 @@ class _Token(_RE):
def
__deepcopy__
(
self
,
memo
=
{}):
duplicate
=
self
.
__class__
(
self
.
token
,
self
.
rx_wsl
,
self
.
rx_wsr
)
duplicate
.
name
=
self
.
name
duplicate
.
ptype
=
self
.
ptype
#
duplicate.ptype =
self.ptype
return
duplicate
def
__repr__
(
self
):
...
...
@@ -1178,7 +1178,7 @@ class UnaryOperator(Parser):
parser
=
copy
.
deepcopy
(
self
.
parser
,
memo
)
duplicate
=
self
.
__class__
(
parser
)
duplicate
.
name
=
self
.
name
duplicate
.
ptype
=
self
.
ptype
#
duplicate.ptype =
self.ptype
return
duplicate
def
apply
(
self
,
func
:
Parser
.
ApplyFunc
)
->
bool
:
...
...
@@ -1209,7 +1209,7 @@ class NaryOperator(Parser):
parsers
=
copy
.
deepcopy
(
self
.
parsers
,
memo
)
duplicate
=
self
.
__class__
(
*
parsers
)
duplicate
.
name
=
self
.
name
duplicate
.
ptype
=
self
.
ptype
#
duplicate.ptype =
self.ptype
return
duplicate
def
apply
(
self
,
func
:
Parser
.
ApplyFunc
)
->
bool
:
...
...
@@ -1394,7 +1394,7 @@ class Series(NaryOperator):
parsers
=
copy
.
deepcopy
(
self
.
parsers
,
memo
)
duplicate
=
self
.
__class__
(
*
parsers
,
mandatory
=
self
.
mandatory
)
duplicate
.
name
=
self
.
name
duplicate
.
ptype
=
self
.
ptype
#
duplicate.ptype =
self.ptype
return
duplicate
def
__call__
(
self
,
text
:
StringView
)
->
Tuple
[
Optional
[
Node
],
StringView
]:
...
...
@@ -1840,7 +1840,7 @@ class Retrieve(Parser):
def
__deepcopy__
(
self
,
memo
):
duplicate
=
self
.
__class__
(
self
.
symbol
,
self
.
filter
)
duplicate
.
name
=
self
.
name
duplicate
.
ptype
=
self
.
ptype
#
duplicate.ptype =
self.ptype
return
duplicate
def
__call__
(
self
,
text
:
StringView
)
->
Tuple
[
Optional
[
Node
],
StringView
]:
...
...
@@ -1961,8 +1961,8 @@ class Forward(Parser):
def
__deepcopy__
(
self
,
memo
):
duplicate
=
self
.
__class__
()
duplicate
.
name
=
self
.
name
duplicate
.
ptype
=
self
.
ptype
#
duplicate.name = self.name
# Forward-Parsers should never have a name!
#
duplicate.ptype = self.ptype
memo
[
id
(
self
)]
=
duplicate
parser
=
copy
.
deepcopy
(
self
.
parser
,
memo
)
duplicate
.
set
(
parser
)
...
...
DHParser/syntaxtree.py
View file @
a9dd76b8
...
...
@@ -131,7 +131,8 @@ class MockParser(ParserBase):
assert
not
ptype
or
ptype
[
0
]
==
':'
super
().
__init__
()
self
.
name
=
name
self
.
ptype
=
ptype
or
':'
+
self
.
__class__
.
__name__
if
ptype
:
self
.
ptype
=
ptype
# or ':' + self.__class__.__name__
class
ZombieParser
(
MockParser
):
...
...
dhparser.py
View file @
a9dd76b8
...
...
@@ -29,7 +29,7 @@ from DHParser.ebnf import get_ebnf_grammar, get_ebnf_transformer, get_ebnf_compi
from
DHParser.log
import
logging
from
DHParser.toolkit
import
re
LOGGING
=
Tru
e
LOGGING
=
Fals
e
dhparserdir
=
os
.
path
.
dirname
(
os
.
path
.
realpath
(
__file__
))
...
...
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