Вы можете использовать генератор синтаксических анализаторов ANTLR для анализа такого ввода из файла.Вы можете использовать следующую грамматику:
S → {Q}
Q → T | ɛ
T → A | A,T
A → I=V | {T}
I → item // item is the regex for whatever you expect in the item field
V → value // value is the regex for whatever you expect in the value field
Приведенная выше грамматика соответствует строкам следующего типа (она также поддерживает вложение фигурных скобок):
- {item = value}
- {элемент = значение, элемент = значение}
- {элемент = значение, элемент = значение, элемент = значение, элемент = значение}
- {элемент = значение, элемент =значение, элемент = значение, элемент = значение, {элемент = значение}, {элемент = значение}}
- {элемент = значение, элемент = значение, элемент = значение, элемент = значение, {элемент = значение,{item = value}}}
Как только вы проанализируете входной файл с этой грамматикой, используя ANTLR, вы получите дерево разбора, которое сохранит иерархию пар элемент-значение в исходном вводе.Используя эту структуру данных дерева разбора, вы можете легко получить информацию о различных парах элемент-значение.
С ANTLR ваша структура данных дерева разбора будет выглядеть примерно так:
,
/ \
/ \
/ \
/ \
/ \
= , ===> represents {item=value,{item=value,item=value}}
/ \ / \
/ \ / \
item value / \
= =
/ \ / \
/ \ / \
item value item value
Даже если вы не хотите использовать для этой задачи такой инструмент, как ANTLR, вы можете легко написать синтаксический анализатор с рекурсивным спуском на основе этой грамматики, хотя вам придется токенизировать ввод файла, используя эти 6 типов токенов (изатем скормите его вашему парсеру) =>
Token class matches
LPAREN "{"
RPAREN "}"
COMMA ","
ITEM item //regex for identifying items
VALUE value //regex for identifying values
EQUAL "="