Antlr4: иерархическое дерево разбора
У меня есть эта очень простая грамматика для очень простого пользовательского шаблона, вдохновленного рулем.
grammar TemplateParser;
tags
: (BEGINTAG | ENDTAG)*
;
BEGINTAG : ('{{Begin'.*? '}}')+ ('{{'.*? '}}')*
;
ENDTAG : '{{End' .*? '}}'
;
WS : (' '|'\t'|'\r'|'\n')+ -> skip
;
и когда я пытаюсь разобрать следующее
{{BeginLoop}}{{Properties}}
{{BeginTemplate}}{{Equals}}{{ReturnType}}{{Number}}
Outer Template goes here
{{BeginTemplate}}{{Equals}}{{ReturnType}}{{String}}
Inner template goes here
{{EndTemplate}}
{{EndTemplate}}
{{EndLoop}}
{{BeginTemplate}}{{Equals}}{{ReturnType}}{{Number}}
Template 2 goes here.
{{EndTemplate}}
Используя IntelliJ при разборе вышеуказанного шаблона, я почти получаю желаемые результаты. Иерархия потеряна, все предметы находятся на одном уровне.
Когда я пытаюсь сделать то же самое с грамматикой json из Github, я получаю иерархическое дерево.