【发布时间】:2015-04-21 06:26:37
【问题描述】:
我需要在 ANTLR 3 中解析 SQL Server if 语句。 SQL Server if 语句如下:
IF expression BEGIN? statements END?
因为 BEGIN 和 END 是可选的。如果令牌流中没有指定这些,我只需要在运行时在 ANTLR 令牌流中添加 BEGIN 和 END 令牌。
【问题讨论】:
-
为什么不在语法中将标记标记为可选?
-
我将这些设置为可选,但我收到警告决策可以匹配多个替代方案...实际上我有一个语法,它导入另一个语法,并且不知何故,如果语句解析与用导入的语法编写的规则冲突。我试图通过 ANTLR 作品找出警告,但它显示了大量 NoViableAlt 错误,但没有运行测试用例,也没有生成语法图或树。
-
SQL 语法解析起来并不简单,您是否查看过antlr3.org/grammar/list.html 中的现有语法?
-
是的,我看过它们,发现它们真的很有帮助。我正在处理 antlr3 的 DB2 SQL 和 SQL Server t-sql 解释器和语法无法达到我们想要达到的目的。