Функция преобразующая строку (для регулярного выражения) в словарь.

ho13

Новичок
Пользователь
Июн 2, 2020
1
0
1
Дан словарь:
rexes = {'key': '.', 'val': {'fst': {'key': '.', 'val': {'fst': {'key': '|', 'val': {'fst': {'key': 'atm', 'val': 'aa'}, 'snd': {'key': '*', 'val': {'key': 'atm', 'val': 'b'}}}
}, 'snd': {'key': 'atm', 'val': 'cz'}}}, 'snd': {'key': '*', 'val': {'key': '*', 'val': {'key': 'atm', 'val': 'aa'}}}}
}
или в таком виде

rexaa = {'key': 'atm', 'val': 'aa'}
rexb = {'key': 'atm', 'val': 'b'}
rexcz = {'key': 'atm', 'val': 'cz'}
rex0 = {'key': '*', 'val': rexb}
rex1 = {'key': '|', 'val': {'fst': rexaa, 'snd': rex0}}
rex2 = {'key': '.', 'val': {'fst': rex1, 'snd': rexcz}}
rex3 = {'key': '*', 'val': rexaa}
rex4 = {'key': '*', 'val': rex3}
rex = {'key': '.', 'val': {'fst': rex2, 'snd': rex4}}

def istoken(obj):
"""check itm"""
return isinstance(obj,str)

def correct_rex(obj):
"""check corect"""
try:
if obj['key'] == 'atm':
return istoken(obj['val'])
if obj['key'] in {'|','.'}:
return (correct_rex(obj['val']['fst']) and correct_rex(obj['val']['snd']))
if obj['key'] == '*':
return correct_rex(obj['val'])
except Exception as ex:
return False

return False

def show_rex(obj):
if not correct_rex(obj):
return None
if obj['key'] == 'atm':
return "'" + obj['val'] + "'"
if obj['key'] == '*':
if obj['val']['key'] == 'atm':
return show_rex(obj['val']) + '*'
else:
return "(" + show_rex(obj['val']) + ")*"
if obj['key'] == '.':
fst = obj['val']['fst']; sfst = show_rex(fst)
snd = obj['val']['snd']; ssnd = show_rex(snd)
if fst['key'] == '|':
res = "(" + sfst + "), "
else:
res = sfst + ", "
if snd['key'] == '|':
res = res + "(" + ssnd + ")"
else:
res = res + ssnd
return res
if obj['key'] == '|':
sfst = show_rex(obj['val']['fst'])
ssnd = show_rex(obj['val']['snd'])
return sfst +'|'+ ssnd

print(show_rex(rex0)) получаем ('aa'|'b'*), 'cz', ('aa'*)*


Натолкните на мысль, подскажите как получить обратку, тоесть из строки - словарь

пока написана функция проверки строки и предварительного вывода
на выходе уже есть вот такое:


['(', {'key': 'atm', 'val': 'aa'}, '|', {'key': 'atm', 'val': 'b'}, '*', ')', ',', {'key': 'atm', 'val': 'cz'}, ',', '(', {'key': 'atm', 'val': 'aa'}, '*', ')', '*'] #из это строки ('aa'|'b'*), 'cz', ('aa'*)*
 

Вложения

  • A2B2 (копия).txt
    4,7 КБ · Просмотры: 1

Форум IT Специалистов