Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
P
pycomsdk
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
com
pycomsdk
Commits
cc256df3
Commit
cc256df3
authored
Mar 30, 2025
by
Sergey Bobrov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Описал def parser
parent
d01ebe56
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
19 additions
and
2 deletions
+19
-2
graph.py
comsdk/graph.py
+1
-0
parser.py
comsdk/parser.py
+17
-0
cycled_v2.adot
tests/adot/cycled_v2.adot
+0
-1
test_parser.py
tests/test_parser.py
+1
-1
No files found.
comsdk/graph.py
View file @
cc256df3
...
...
@@ -114,6 +114,7 @@ class Graph:
return
False
# cur_state, implicit_parallelization_info = morph(data)
cur_state
=
transfer_f
(
data
)
print
(
cur_state
)
# print(morph)
if
'__EXCEPTION__'
in
data
:
return
False
...
...
comsdk/parser.py
View file @
cc256df3
...
...
@@ -273,28 +273,45 @@ class Parser():
# @todo В случае, если на вход будет подан файл в отличной от UTF-8 кодировке программа работать не будет
with
open
(
filename
,
"r"
,
encoding
=
"utf-8"
)
as
file
:
dot
=
file
.
read
()
# проверка на правильное количесво скобок
self
.
_check_brackets
(
dot
)
# @todo Возможно стоит заменить данный код на библиотеку Lark
# поиск всех подстрок в кавычках
comments
=
[
m
for
m
in
re
.
finditer
(
r'\".*\"'
,
dot
)]
for
m
in
comments
:
# Заменяет пробелы внутри кавычек на специальный символ \0
dot
=
dot
[:
m
.
span
()[
0
]]
+
(
dot
[
m
.
span
()[
0
]:
m
.
span
()[
1
]])
.
replace
(
' '
,
'
\0
'
)
+
dot
[
m
.
span
()[
1
]:]
# Удаляет все пробелы, табы(\t) и возвраты каретки(\r), кроме тех, что внутри кавычек(они заменены на \0)
dot
=
re
.
sub
(
r"[ \t\r]"
,
""
,
dot
)
#deleting all spaces
# Удаляет ключевые слова digraph, а также фигурные скобки { и }
dot
=
re
.
sub
(
r"((digraph)|}|{)"
,
""
,
dot
)
# Удаляет однострочные комментарии, начинающиеся с //
dot
=
re
.
sub
(
r"\/\/.*"
,
""
,
dot
)
# Удаляет строки, содержащие только перенос строки (\n)
dot
=
re
.
sub
(
r"^\n$"
,
""
,
dot
)
# @ todo заменить нижние две строки на dotlines = [line.strip() for line in dot.splitlines() if line.strip()]
# разбивает строку на список подстрок
dotlines
=
dot
.
splitlines
()
# фильтрует пустые подстроки
dotlines
=
list
(
filter
(
None
,
dotlines
))
# записали имя графа в класс GraphFactory
self
.
fact
.
name
=
dotlines
[
0
]
# Удалили из строки
dotlines
=
dotlines
[
1
:]
# ent_re - regular expr for edges, states, functions properties
# ищет строки вида ИМЯ[атрибуты]
ent_re
=
re
.
compile
(
r"^\w+\[.*\]$"
)
# top_re - regular expr for topology properties, most time consuming one
# Строки вида ИСТОЧНИК->ЦЕЛЬ[атрибуты] или ИСТОЧНИК=>ЦЕЛЬ[атрибуты]
top_re
=
re
.
compile
(
r"^(\w+,?)+(->|=>)(\w+,?)+(\[(\w+=(\(?\w+,?\)?)+,?)+\])?"
)
# (r"^\w[\w\s,]*(->|=>)\s*\w[\w\s,=\[\]()]*$")
for
i
,
ln
in
enumerate
(
dotlines
):
# функция
if
ent_re
.
match
(
ln
):
name
,
parm
=
self
.
_param_from_entln
(
ln
)
self
.
fact
.
entities
[
name
]
=
parm
# топология
elif
top_re
.
match
(
ln
):
self
.
_topology
(
ln
)
return
self
.
fact
.
build
(
Parser
.
subgr_count
)
...
...
tests/adot/cycled_v2.adot
View file @
cc256df3
...
...
@@ -5,7 +5,6 @@ digraph CYCLIC {
MORPH_LOOP [predicate=CHECK, function=INC]
MORPH_EXIT [function=INC]
// Топология с циклом
__BEGIN__ -> LOOP [edge_index=0]
LOOP -> LOOP [morphism=MORPH_LOOP, edge_index=1]
...
...
tests/test_parser.py
View file @
cc256df3
...
...
@@ -45,7 +45,7 @@ class ParserGoodCheck(unittest.TestCase):
def
test_complex_graph
(
self
):
parsr
=
Parser
()
gr
=
parsr
.
parse_file
(
"./
tests/
adot/complex.adot"
)
gr
=
parsr
.
parse_file
(
"./adot/complex.adot"
)
data
=
{
"a"
:
1
,
"b"
:
1
}
gr
.
run
(
data
)
self
.
assertEqual
(
data
[
"a"
],
4
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a 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