У меня есть вложенное представление пар значений ключа что-то вроде:
Случай 1:
str = " value 23"
Случай 2:
str = " value { \
{'name' {value 'joint'}},
{'id' {value 51}} \
}"
Или случай 3:
str = " value { \
{ 'drive' { value 'joint1'}}, \
{ 'steer' { value 45.35}}
}"
Как видно, вложение может go на неограниченные уровни. например, в приведенном выше примере, 'joint2'
также может иметь фигурные скобки. value
является единственным ключевым словом здесь. Наконец, значения могут быть целыми числами, числами с плавающей запятой или строками в одинарных кавычках.
У меня здесь очень простой код:
field_name = Keyword("value").supress()
real = Combine(Word(nums) + '.' + Word(nums))
values = real | Word(
nums) | sglQuotedString.setParseAction(removeQuotes)
nested = nestedExpr('{', '}')
grammar = field_name + \
(values | (nestedExpr('{', '}') + Optional(',').suppress()))("values")
для случая 2, я получаю вывод
{'values': [[["'name'", ['value', "'joint'"]], ',', ["'id'", ['value', '51']]]]}
Сначала анализируются ','
и value
. Во-вторых, я не уверен, правильно ли я использую nestedExpr
. Должен ли я использовать Dict
внутри nestedExpr
?
Edit 1: Я уже опубликовал решение для вышеупомянутых случаев, но я понял, что случаи 2 и 3 идентичны. На самом деле я хотел показать
Случай 4:
str = "value { \
{'name' {value 'joint1' { \
value 12} \
} \
} \
}, \
{'id' {value 51}} \
}"
Для таких случаев мне нужно знать, насколько глубока вложенность?