Я использую ANTLR4 для анализа файла структурированных данных и, похоже, попал в стену. Я знаю, что это очень конкретный вопрос, но, возможно, кто-то может направить меня в правильном направлении.
Я анализирую файлы, которые выглядят так:
MSH
[ PD1 ]
[{ ROL }]
[
{ ROL }
]
[
{
PR1
[{ ROL }]
}
]
[
{
IN1
[ IN2 ]
[{ IN3 }]
}
]
[ ACC ]
Где:
- 3 одинарные буквенно-цифровые цифры представляют СЕГМЕНТ
- [SEGMENT] представляет необязательный сегмент
- {SEGMENT} представляет повторяющийся сегмент
- [{SEGMENT}] представляет необязательный повторяющийся сегмент
- Любой из вышеперечисленных профилей СЕГМЕНТА может быть сгруппирован во вложении
Необязательные и / или повторяющиеся группы.
- Примерами вложенных повторяющихся групп являются строки 4–19 в приведенном выше коде.
Мой ANTLR4 Lexer / Parser работает хорошо, давая следующее дерево разбора:
Конечная цель - перевести любой набор данных с использованием вышеуказанных правил в формат JSON. Пример использования нескольких строк из файла набора данных выше:
{
"MSH": {
"name": "placeholder",
"opt": false,
"rep": false,
"description": "Plain Segment"
},
"PD1": {
"name": "placeholder",
"opt": true,
"rep": false,
"description": "Optional Segment"
},
// some segments here
"group": {
"opt": true,
"rep": false,
"description": "Optionals group placeholder text",
"segment0": {
"ROL": {
"name": "placeholder",
"opt": false,
"rep": true,
"description": "Repeating Segment"
}
}
}
}
Я сгенерировал что-то похожее на вышеприведенный json с помощью прослушивателя ANTLR4 , реализованного здесь. Но вложенные группы, которые продолжают приводить меня в замешательство, я нахожу трудным делать со слушателем. Возможно, другой набор глаз поможет.