Commit 3ed50f82 authored by Savva Golubitsky's avatar Savva Golubitsky

levels works, printing graph in work

1 merge request!1Парсер aDOT формата в рамках pycomsdk
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
...@@ -308,15 +308,9 @@ class Parser(): ...@@ -308,15 +308,9 @@ class Parser():
self.checked.append(st) self.checked.append(st)
states_to_check.remove(st) states_to_check.remove(st)
bush = _Bush(st) bush = _Bush(st)
print("ins:", bush.state.name)
bush.grow_bush() bush.grow_bush()
self.bushes[st] = bush self.bushes[st] = bush
for i, br in enumerate(bush.branches):
for b in br:
print(i, b)
print("outs:")
for outs in bush.outstates: for outs in bush.outstates:
print(outs.name)
if outs not in states_to_check and outs not in self.checked: if outs not in states_to_check and outs not in self.checked:
states_to_check.append(outs) states_to_check.append(outs)
# for b in self.bushes: # for b in self.bushes:
...@@ -333,23 +327,50 @@ class Parser(): ...@@ -333,23 +327,50 @@ class Parser():
# self.bushes[st].token = cur_b.level / len(cur_b.branches) # self.bushes[st].token = cur_b.level / len(cur_b.branches)
# self.bushes[self.fact.graph.init_state].token # self.bushes[self.fact.graph.init_state].token
send_token(self.fact.graph.init_state, 1,self.bushes, []) send_token(self.fact.graph.init_state, 1,self.bushes, [])
level = 0
#bsh = self.bushes
#for b in bsh:
## print("-"*int(1/self.bushes[b].token), b.name, self.bushes[b].token)
# for br in bsh[b].branches:
# if bsh[br.out].token-bsh[b] < 0:
# level+=1
print_bush(self.fact.graph.init_state, 0, self.bushes, [])
def print_bush(cur_state, level, bushes, checked):
cur_b = bushes[cur_state]
if cur_state in checked:
return
else:
checked.append(cur_state)
if len(cur_b.outstates)==0:
return
checked.append(cur_state)
print(cur_b.state.name)
for i, br in enumerate(cur_b.branches):
for b in br:
print("\t"*level, b.pred)
print("\t"*level, b.morph)
if cur_b.outstates[i] in checked:
print("\t"*level,"goto {}".format(cur_b.outstates[i].name))
elif cur_b.token - bushes[cur_b.outstates[i]].token>0:
level +=1
elif cur_b.token - bushes[cur_b.outstates[i]].token<0:
level -=1
print_bush(cur_b.outstates[i], level, bushes, checked)
for b in self.bushes:
print("-"*int(1/self.bushes[b].token), b.name, self.bushes[b].token)
def send_token(cur_state, token, bushes, checked): def send_token(cur_state, token, bushes, checked):
cur_b = bushes[cur_state] cur_b = bushes[cur_state]
print("NAME:", cur_state.name, cur_b.token )
if cur_state in checked: if cur_state in checked:
return return
cur_b.token += token cur_b.token += token
cur_b.incomes +=1 cur_b.incomes +=1
if len(cur_b.outstates)==0: if len(cur_b.outstates)==0:
return return
if cur_b.incomes == cur_b.state.input_edges_number - cur_b.state.looped_edges_number: if cur_b.incomes == cur_b.state.input_edges_number - cur_b.state.looped_edges_number:
checked.append(cur_state) checked.append(cur_state)
for st in cur_b.outstates: for st in cur_b.outstates:
send_token(st,token / len(cur_b.outstates), bushes, checked) send_token(st,cur_b.token / len(cur_b.outstates), bushes, checked)
class _Tr(): class _Tr():
slots=( slots=(
......
No preview for this file type
No preview for this file type
...@@ -10,7 +10,7 @@ from comsdk.edge import Edge ...@@ -10,7 +10,7 @@ from comsdk.edge import Edge
prsr = pars.Parser(tocpp=True) prsr = pars.Parser(tocpp=True)
data = {"a":10} data = {"a":10}
gr = prsr.parse_file('./tests/adot/file.adot') gr = prsr.parse_file('./tests/adot/testsimple.adot')
# gr.run(data) # gr.run(data)
# print (data) # print (data)
print(prsr.generate_cpp()) print(prsr.generate_cpp())
......
...@@ -14,7 +14,7 @@ digraph SIMPLE { ...@@ -14,7 +14,7 @@ digraph SIMPLE {
__BEGIN__ -> ST1 [morphism = MORPH] __BEGIN__ -> ST1 [morphism = MORPH]
ST1 -> ST2, ST3, ST4 [morphism = (MORPH, MORPH1, MORPH2)] ST1 -> ST2, ST3, ST4 [morphism = (MORPH, MORPH1, MORPH2)]
ST2 -> ST3, ST5 [morphism = (MORPH1,MORPH2)] ST2 -> ST3, ST5 [morphism = (MORPH1,MORPH2)]
ST4 -> ST3 [morphism = MORPH] ST4 -> ST5 [morphism = MORPH]
ST3 -> ST5 [morphism = MORPH] ST3 -> ST5 [morphism = MORPH]
//ST21 -> ST31, ST312[morphism =(MORPH1,MORPH2)] //ST21 -> ST31, ST312[morphism =(MORPH1,MORPH2)]
//ST3, ST31, ST312 -> ST4[morphism = (MORPH,MORPH1,MORPH2) ] //ST3, ST31, ST312 -> ST4[morphism = (MORPH,MORPH1,MORPH2) ]
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment