Я использую ANTLR 4 для анализа подмножества SQL, и в настоящее время я столкнулся с проблемой. Мне нужно правило для предиката со следующей структурой:
predicate
:
expr relation expr
| between_clause
| predicate OR predicate
| predicate AND predicate
| '(' predicate ')'
;
Проблема здесь в правиле expr
. Существуют разные типы предикатов, в которых expr
должны отличаться, но вся вышеупомянутая структура сохраняется.
Я бы хотел параметризовать правило predicate
, чтобы автоматически создать несколько правил для разных типов предикатов. (правило выше, где подставляются конкретные expr
типы).
Возможно ли это в ANTLR 4?
PS Я вижу два альтернативных варианта:
- Копировать-paste
predicate
править и заменять различные expr
правила вручную - иметь все возможные альтернативы в правиле
expr
и проверять, что только один тип из них используется для определенного предиката в коде целевого языка
Но оба они выглядят достаточно плохо. Первый случай приводит к комбинаторному взрыву, а второй - к принятию множества неверных предикатов на уровне грамматики.