Я пытаюсь разобрать выражения типа he did [something called :action]
, где действие является переменной, а скобки подразумевают, что блок является необязательным. Если одна из переменных внутри скобок отсутствует, тогда мне нужно заменить весь блок на заполнитель, например nothing
.Анализ простого шаблона с Antlr4
Я думаю, что логическая часть проста, потому что я знаком с механизмом посетителя, но я не мог разобрать строки.
Я попробовал следующий синтаксический анализатор, но он генерирует узел ошибок вместо optionalParameter. Я не мог найти проблему, может ли кто-нибудь взглянуть на этот скрипт разбора и рассказать мне, что я делаю неправильно?
grammar NamedParam;
query: (QUERY_CONTENT optionalParameter)*;
optionalParameter: '[' (STRING namedParameter)* ']';
namedParameter: ':' IDENTIFIER;
IDENTIFIER
: (ALPHANUMERIC)+;
fragment ALPHANUMERIC
: [A-Za-z0-9];
STRING : ~(':' | ']')* ;
QUERY_CONTENT : ~('[')* ;