【发布时间】:2019-10-14 23:45:00
【问题描述】:
我正在使用 ANTLR 4 解析 SQL 子集,目前我遇到了一个问题。 我需要一个具有以下结构的谓词规则:
predicate
:
expr relation expr
| between_clause
| predicate OR predicate
| predicate AND predicate
| '(' predicate ')'
;
这里的问题是expr 规则。有不同类型的谓词,expr 应该不同,但保留了前面提到的整个结构。
我想以某种方式对 predicate 规则进行参数化,以便为不同的谓词类型自动实例化多个规则(上面的规则替换了特定的 expr 类型)。
在 ANTLR 4 中可以吗?
附:我看到了两个替代选项:
- 复制粘贴
predicate规则并手动替换不同的expr规则 - 在
expr规则中包含所有可能的替代方案,并验证其中只有一种类型用于目标语言代码中的特定谓词
但他们两个看起来都够糟糕的了。第一种情况导致组合爆炸,第二种情况导致在语法层面接受很多不正确的谓词。
【问题讨论】: