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
e080ad37
Commit
e080ad37
authored
Oct 09, 2018
by
Eckhart Arnold
Browse files
cleanup experimental folder
parent
0b102654
Changes
8
Hide whitespace changes
Inline
Side-by-side
experimental/.nogit
0 → 100644
View file @
e080ad37
experimental/ws/README.md
deleted
100644 → 0
View file @
0b102654
# ws
PLACE A SHORT DESCRIPTION HERE
Author: AUTHOR'S NAME
<EMAIL>
, AFFILIATION
## License
ws is open source software under the
[
Apache 2.0 License
](
https://www.apache.org/licenses/LICENSE-2.0
)
Copyright YEAR AUTHOR'S NAME
<EMAIL>
, AFFILIATION
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
experimental/ws/example.dsl
deleted
100644 → 0
View file @
0b102654
Life is but a walking shadow
experimental/ws/grammar_tests/01_test_word.ini
deleted
100644 → 0
View file @
0b102654
[match:WORD]
M1:
word
M2:
one_word_with_underscores
[fail:WORD]
F1:
two
words
experimental/ws/grammar_tests/02_test_document.ini
deleted
100644 → 0
View file @
0b102654
[match:document]
M1:
"""This
is
a
sequence
of
words
extending
over
several
lines"""
M2:
"""
This
sequence
contains
leading
whitespace"""
[fail:document]
F1:
"""This
test
should
fail,
because
neither
comma
nor
full
have
been
defined
anywhere."""
experimental/ws/tst_ws_grammar.py
deleted
100755 → 0
View file @
0b102654
#!/usr/bin/python3
"""tst_ws_grammar.py - runs the unit tests for the ws-grammar
"""
import
os
import
sys
sys
.
path
.
append
(
r
'/home/eckhart/Entwicklung/DHParser'
)
scriptpath
=
os
.
path
.
dirname
(
__file__
)
try
:
from
DHParser
import
dsl
import
DHParser.log
from
DHParser
import
testing
except
ModuleNotFoundError
:
print
(
'Could not import DHParser. Please adjust sys.path in file '
'"%s" manually'
%
__file__
)
sys
.
exit
(
1
)
def
recompile_grammar
(
grammar_src
,
force
):
with
DHParser
.
log
.
logging
(
False
):
# recompiles Grammar only if it has changed
if
not
dsl
.
recompile_grammar
(
grammar_src
,
force
=
force
):
print
(
'
\n
Errors while recompiling "%s":'
%
grammar_src
+
'
\n
--------------------------------------
\n\n
'
)
with
open
(
'ws_ebnf_ERRORS.txt'
)
as
f
:
print
(
f
.
read
())
sys
.
exit
(
1
)
def
run_grammar_tests
(
glob_pattern
):
with
DHParser
.
log
.
logging
(
False
):
error_report
=
testing
.
grammar_suite
(
os
.
path
.
join
(
scriptpath
,
'grammar_tests'
),
get_grammar
,
get_transformer
,
fn_patterns
=
[
glob_pattern
],
report
=
True
,
verbose
=
True
)
return
error_report
if
__name__
==
'__main__'
:
arg
=
sys
.
argv
[
1
]
if
len
(
sys
.
argv
)
>
1
else
'*_test_*.ini'
if
arg
.
endswith
(
'.ebnf'
):
recompile_grammar
(
arg
,
force
=
True
)
else
:
recompile_grammar
(
os
.
path
.
join
(
scriptpath
,
'ws.ebnf'
),
force
=
False
)
sys
.
path
.
append
(
'.'
)
from
wsCompiler
import
get_grammar
,
get_transformer
error_report
=
run_grammar_tests
(
glob_pattern
=
arg
)
if
error_report
:
print
(
'
\n
'
)
print
(
error_report
)
sys
.
exit
(
1
)
print
(
'ready.
\n
'
)
experimental/ws/ws.ebnf
deleted
100644 → 0
View file @
0b102654
# ws-grammar
#######################################################################
#
# EBNF-Directives
#
#######################################################################
@ whitespace = vertical # implicit whitespace, includes any number of line feeds
@ literalws = right # literals have implicit whitespace on the right hand side
@ comment = /#.*/ # comments range from a '#'-character to the end of the line
@ ignorecase = False # literals and regular expressions are case-sensitive
#######################################################################
#
# Structure and Components
#
#######################################################################
document = ~ { WORD } §EOF # root parser: a sequence of words preceded by whitespace
# until the end of file
#######################################################################
#
# Regular Expressions
#
#######################################################################
WORD = /\w+/ ~ # a sequence of letters, optional trailing whitespace
EOF = !/./ # no more characters ahead, end of file reached
experimental/ws/wsCompiler.py
deleted
100755 → 0
View file @
0b102654
#!/usr/bin/python
#######################################################################
#
# SYMBOLS SECTION - Can be edited. Changes will be preserved.
#
#######################################################################
from
functools
import
partial
import
os
import
sys
sys
.
path
.
append
(
r
'/home/eckhart/Entwicklung/DHParser'
)
try
:
import
regex
as
re
except
ImportError
:
import
re
from
DHParser
import
logging
,
is_filename
,
load_if_file
,
\
Grammar
,
Compiler
,
nil_preprocessor
,
PreprocessorToken
,
Whitespace
,
\
Lookbehind
,
Lookahead
,
Alternative
,
Pop
,
_Token
,
Synonym
,
AllOf
,
SomeOf
,
Unordered
,
\
Option
,
NegativeLookbehind
,
OneOrMore
,
RegExp
,
Retrieve
,
Series
,
_RE
,
Capture
,
\
ZeroOrMore
,
Forward
,
NegativeLookahead
,
Required
,
mixin_comment
,
compile_source
,
\
grammar_changed
,
last_value
,
counterpart
,
accumulate
,
PreprocessorFunc
,
\
Node
,
TransformationFunc
,
TransformationDict
,
\
traverse
,
remove_children_if
,
merge_children
,
is_anonymous
,
\
reduce_single_child
,
replace_by_single_child
,
replace_or_reduce
,
remove_whitespace
,
\
remove_expendables
,
remove_empty
,
remove_tokens
,
flatten
,
is_whitespace
,
\
is_empty
,
is_expendable
,
collapse
,
replace_content
,
WHITESPACE_PTYPE
,
TOKEN_PTYPE
,
\
remove_nodes
,
remove_content
,
remove_brackets
,
replace_parser
,
remove_anonymous_tokens
,
\
keep_children
,
is_one_of
,
has_content
,
apply_if
,
remove_first
,
remove_last
,
\
remove_anonymous_empty
,
keep_nodes
,
traverse_locally
,
strip
,
lstrip
,
rstrip
#######################################################################
#
# PREPROCESSOR SECTION - Can be edited. Changes will be preserved.
#
#######################################################################
def
wsPreprocessor
(
text
):
return
text
,
lambda
i
:
i
def
get_preprocessor
()
->
PreprocessorFunc
:
return
wsPreprocessor
#######################################################################
#
# PARSER SECTION - Don't edit! CHANGES WILL BE OVERWRITTEN!
#
#######################################################################
class
wsGrammar
(
Grammar
):
r
"""Parser for a ws source file, with this grammar:
# ws-grammar
#######################################################################
#
# EBNF-Directives
#
#######################################################################
@ whitespace = vertical # implicit whitespace, includes any number of line feeds
@ literalws = right # literals have implicit whitespace on the right hand side
@ comment = /#.*/ # comments range from a '#'-character to the end of the line
@ ignorecase = False # literals and regular expressions are case-sensitive
#######################################################################
#
# Structure and Components
#
#######################################################################
document = ~ { WORD } §EOF # root parser: a sequence of words preceded by whitespace
# until the end of file
#######################################################################
#
# Regular Expressions
#
#######################################################################
WORD = /\w+/ ~ # a sequence of letters, optional trailing whitespace
EOF = !/./ # no more characters ahead, end of file reached
"""
source_hash__
=
"35e8b695c47d625c91a181d455b75ed9"
parser_initialization__
=
"upon instantiation"
COMMENT__
=
r
'#.*'
WHITESPACE__
=
r
'\s*'
WSP_RE__
=
mixin_comment
(
whitespace
=
WHITESPACE__
,
comment
=
COMMENT__
)
wspL__
=
''
wspR__
=
WSP__
whitespace__
=
Whitespace
(
WSP__
)
EOF
=
NegativeLookahead
(
RegExp
(
'.'
))
WORD
=
Series
(
RegExp
(
'
\\
w+'
),
whitespace__
)
document
=
Series
(
whitespace__
,
ZeroOrMore
(
WORD
),
EOF
,
mandatory
=
2
)
root__
=
document
def
get_grammar
()
->
wsGrammar
:
global
thread_local_ws_grammar_singleton
try
:
grammar
=
thread_local_ws_grammar_singleton
except
NameError
:
thread_local_ws_grammar_singleton
=
wsGrammar
()
grammar
=
thread_local_ws_grammar_singleton
return
grammar
#######################################################################
#
# AST SECTION - Can be edited. Changes will be preserved.
#
#######################################################################
ws_AST_transformation_table
=
{
# AST Transformations for the ws-grammar
"+"
:
remove_empty
,
"document"
:
[],
"WORD"
:
[],
"EOF"
:
[],
":_Token, :_RE"
:
reduce_single_child
,
"*"
:
replace_by_single_child
}
def
wsTransform
()
->
TransformationDict
:
return
partial
(
traverse
,
processing_table
=
ws_AST_transformation_table
.
copy
())
def
get_transformer
()
->
TransformationFunc
:
global
thread_local_ws_transformer_singleton
try
:
transformer
=
thread_local_ws_transformer_singleton
except
NameError
:
thread_local_ws_transformer_singleton
=
wsTransform
()
transformer
=
thread_local_ws_transformer_singleton
return
transformer
#######################################################################
#
# COMPILER SECTION - Can be edited. Changes will be preserved.
#
#######################################################################
class
wsCompiler
(
Compiler
):
"""Compiler for the abstract-syntax-tree of a ws source file.
"""
def
__init__
(
self
,
grammar_name
=
"ws"
,
grammar_source
=
""
):
super
(
wsCompiler
,
self
).
__init__
(
grammar_name
,
grammar_source
)
assert
re
.
match
(
'\w+\Z'
,
grammar_name
)
def
_reset
(
self
):
super
().
_reset
()
# initialize your variables here, not in the constructor!
def
on_document
(
self
,
node
):
return
self
.
fallback_compiler
(
node
)
# def on_WORD(self, node):
# return node
# def on_EOF(self, node):
# return node
def
get_compiler
(
grammar_name
=
"ws"
,
grammar_source
=
""
)
->
wsCompiler
:
global
thread_local_ws_compiler_singleton
try
:
compiler
=
thread_local_ws_compiler_singleton
compiler
.
set_grammar_name
(
grammar_name
,
grammar_source
)
except
NameError
:
thread_local_ws_compiler_singleton
=
\
wsCompiler
(
grammar_name
,
grammar_source
)
compiler
=
thread_local_ws_compiler_singleton
return
compiler
#######################################################################
#
# END OF DHPARSER-SECTIONS
#
#######################################################################
def
compile_src
(
source
,
log_dir
=
''
):
"""Compiles ``source`` and returns (result, errors, ast).
"""
with
logging
(
log_dir
):
compiler
=
get_compiler
()
cname
=
compiler
.
__class__
.
__name__
log_file_name
=
os
.
path
.
basename
(
os
.
path
.
splitext
(
source
)[
0
])
\
if
is_filename
(
source
)
<
0
else
cname
[:
cname
.
find
(
'.'
)]
+
'_out'
result
=
compile_source
(
source
,
get_preprocessor
(),
get_grammar
(),
get_transformer
(),
compiler
)
return
result
if
__name__
==
"__main__"
:
if
len
(
sys
.
argv
)
>
1
:
try
:
grammar_file_name
=
os
.
path
.
basename
(
__file__
).
replace
(
'Compiler.py'
,
'.ebnf'
)
if
grammar_changed
(
wsGrammar
,
grammar_file_name
):
print
(
"Grammar has changed. Please recompile Grammar first."
)
sys
.
exit
(
1
)
except
FileNotFoundError
:
print
(
'Could not check for changed grammar, because grammar file "%s" was not found!'
%
grammar_file_name
)
file_name
,
log_dir
=
sys
.
argv
[
1
],
''
if
file_name
in
[
'-d'
,
'--debug'
]
and
len
(
sys
.
argv
)
>
2
:
file_name
,
log_dir
=
sys
.
argv
[
2
],
'LOGS'
result
,
errors
,
ast
=
compile_src
(
file_name
,
log_dir
)
if
errors
:
cwd
=
os
.
getcwd
()
rel_path
=
file_name
[
len
(
cwd
):]
if
file_name
.
startswith
(
cwd
)
else
file_name
for
error
in
errors
:
print
(
rel_path
+
':'
+
str
(
error
))
sys
.
exit
(
1
)
else
:
print
(
result
.
as_xml
()
if
isinstance
(
result
,
Node
)
else
result
)
else
:
print
(
"Usage: wsCompiler.py [FILENAME]"
)
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