Как разобрать файл сложной строки с помощью Boost::Spirit
Я хотел бы проанализировать файл с помощью Boost::Spirit, и я хотел бы передать проанализированные данные в мой класс. Я никогда не использовал Boost::Spirit прежде, поэтому я не могу решить, какой из способов решить эту проблему лучше.
Моя файловая структура выглядит примерно так:
Object {
Attribute1(2) {
1,2,3
4,5,6
}
Attribute2(3) {
1,2,3
3,4,5
6,7,8
}
Attribute3(1) {
1,2
}
ComplexAttribute1 {
Inner_Attribute1: 1
Inner_Attribute2: 2
Inner_Atribute3(2) {
1,2,3, 4,5,6, 7,8,9
9,8,7, 6,5,4, 3,2,1
}
}
ComplexAttribute2 {
Inner_Attribute1: 1
Inner_Attribute2: 2
Inner_Atribute3(2) {
1,2,3, 4,5,6, 7,8,9
9,8,7, 6,5,4, 3,2,1
}
}
Сначала я думал, что читаю файл кусками. Один кусок был бы текстом между символами {и}, и я бы написал грамматику для такого блока. Чем с помощью цикла я бы прошел через куски. Но кажется, что это не очень хорошее решение.
Есть ли способ написать большую грамматику, которая может анализировать весь файл?
Что-то вроде:
если "объект", то... если "атрибут1", то... и т. д...
Кто-нибудь может дать мне пример кода, который делает что-то подобное, будет высоко ценится! Конечно, я рад любым советам / ссылкам, которые могут мне помочь.
Заранее спасибо!
1 ответ
Есть ли способ написать большую грамматику, которая может анализировать весь файл?
А - Да.
Посмотрите на следующие очень похожие грамматики:
- Разбор количества именованных наборов других именованных наборов
- В меньшей степени анализатор JSON (который также показывает вложенные структуры) Анализирует подстроку как JSON с использованием QJsonDocument