我正在尝试在ANTLR中使用语义谓词来实现以下语法规则
test[n]
:({n==0}? => ~('a'))
|({n==1}? => ~('b'))
|({n==2}? => ~('c'))
;
但是,ANTLR不允许我以这种方式定义语法,要求至少有一个替代方法是默认的。对于参数n,显示的确切错误是参考错误。
我的目标是我想要一个,只有一个替代方案可以在任何给定的时刻出现。关于如何做到这一点的任何想法?
谢谢!
答案 0 :(得分:1)
这不可能是正确的:您忘记指定n
的类型,因此编译生成的解析器将无法正常工作。它应该是:
test[int n]
: ({n==0}? => ~('a'))
| ({n==1}? => ~('b'))
| ({n==2}? => ~('c'))
;
当我使用上面的规则创建一个小语法时,我没有得到任何错误。
你能发布一个完整的语法并测试产生这个错误的输入字符串吗?您还可以复制并粘贴确切的错误消息吗?