Использование lepl
библиотеки синтаксического анализатора:
#!/usr/bin/env python
from lepl import AnyBut, Delayed, Drop, DroppedSpace
def Parser():
dict_ = Delayed()
str_ = AnyBut('{}:;')[1::'n',...]
with DroppedSpace():
pair = str_ & Drop(':') & str_ & Drop(';') > tuple
value = str_ & dict_ > tuple
dict_ += Drop('{') & (pair | value)[:] & Drop('}') > dict
return value > dict
print(Parser().parse("a { b: text; c { d: text; }}")[0])
выход
{'a': {'c': {'d': 'text'}, 'b': 'text'}}
См. Также Инструменты разбора Python .
Чтобы понять теорию, лежащую в основе кода, вы можете прочитать книгу , в которой говорится о лексическом анализе (регулярные выражения и конечные автоматы), синтаксическом анализе (EBNF, контекстно-свободные грамматики, анализаторы LL).