У меня есть грамматика для анализа разнородного SQL кода.
Проблема:
- иногда я хочу, чтобы она обрабатывала вложенные комментарии (например: Microsoft SQL) :
COMMENT: '/*' (COMMENT|.)*? ('*/' | EOF) -> channel(HIDDEN);
- иногда я хочу, чтобы он не обрабатывал их (например: Oracle):
COMMENT: '/*' .*? '*/' -> channel(HIDDEN);
Я не хочу:
сделать две разные грамматики
скомпилировать мою грамматику дважды, чтобы получить два разные лексеры и два разных парсера.
Лучшим решением было бы иметь аргумент, передаваемый лексеру / парсеру, чтобы выбрать, какую "реализацию COMMENT" использовать.
Я могу сделать это ? Если да, то как, если нет, есть ли удовлетворительное решение моей проблемы?
Спасибо!