Я хотел бы иметь возможность написать «мета-правило» в ANTLR4, которое принимает правило в качестве входного аргумента и выполняет модификацию этого правила. Вот пример грамматики:Правила парсера ANTLR4 с другими правилами анализатора в качестве аргументов (мета-правила)
grammar G;
WS: [ \t\n\r] + -> skip;
CHAR: [a-z];
term: (CHAR)+;
sum: term ('+' term)+;
pterm: '(' term ')' | '(' pterm ')';
psum: '(' sum ')' | '(' psum ')';
expr: term | sum | pterm | psum;
Правила pterm
и psum
выполняют те же действия на term
и sum
, заключая их в возможно вложенных скобок. Я хотел бы иметь возможность заменить последние три строки выше с чем-то вроде следующего:
enclose[rule]: '(' rule ')' | '(' enclose(rule) ')';
expr: term | sum | enclose(term) | enclose(sum);
Есть ли способ построить мета-правила, как это?
Благодарим за проверку того, что это невозможно. Кажется, я пытался сделать слишком много в парсере. Я переписал (более сложный) парсер, чтобы быть более общим и переместил некоторые из того, что я пытался сделать с обработчиком парсера. – user2487951