Хорошо! Крутая проблема, это вредит моему мозгу.
Во-первых ... для здравого смысла я добавил ваши необработанные данные так, чтобы это имело смысл:
[][b-D-GlcpNAc] {
[(4+1)][b-D-GlcpNAc] {
[(4+1)][b-D-Manp] {
[(3+1)][a-D-Manp] {
[(2+1)][a-D-Manp] { }
}
[(6+1)][a-D-Manp] {
[(3+1)][a-D-Manp] { }
[(6+1)][a-D-Manp] { }
}
}
}
Я думаю, что ключом к этому является выяснение, что такое пары, и вы хотите программно выяснить, на каком уровне вы находитесь.
псевдокод:
hierarchy = 0
nextChar = getNextChar()
while (Parsing):
if (nextChar = "{"):
hierarchy += 1
elif (nextChar = "}"):
hierarchy -= 1
if (nextChar = "["):
storeSugar(hierarchy)
Вы также хотели бы отследить, какой сахар является предыдущим «родительским» сахаром.