ANTLR语义谓词

时间:2010-09-23 21:21:43

标签: antlr grammar

我正在尝试在ANTLR中使用语义谓词来实现以下语法规则

test[n]
       :({n==0}? => ~('a'))
       |({n==1}? => ~('b'))
       |({n==2}? => ~('c'))
       ;

但是,ANTLR不允许我以这种方式定义语法,要求至少有一个替代方法是默认的。对于参数n,显示的确切错误是参考错误。

我的目标是我想要一个,只有一个替代方案可以在任何给定的时刻出现。关于如何做到这一点的任何想法?

谢谢!

1 个答案:

答案 0 :(得分:1)

这不可能是正确的:您忘记指定n的类型,因此编译生成的解析器将无法正常工作。它应该是:

test[int n]
  :  ({n==0}? => ~('a'))
  |  ({n==1}? => ~('b'))
  |  ({n==2}? => ~('c'))
  ;

当我使用上面的规则创建一个小语法时,我没有得到任何错误。

你能发布一个完整的语法并测试产生这个错误的输入字符串吗?您还可以复制并粘贴确切的错误消息吗?