Antlr 添加语法谓词
对于以下规则:Antlr 添加语法谓词,antlr,Antlr,对于以下规则: switchBlockLabels : ^(SWITCH_BLOCK_LABEL_LIST switchCaseLabel* switchDefaultLabel? switchCaseLabel*) ; 我遇到了一个错误:“由于可以从alts 1,2访问递归规则调用,所以rule switchBlockLabels具有非LL描述”。我尝试添加语法谓词来解决这个问题。我读了《确定的ANTLR参考》一书。现在我很困惑,因为rule switchBlockLabels中没有
switchBlockLabels
: ^(SWITCH_BLOCK_LABEL_LIST switchCaseLabel* switchDefaultLabel? switchCaseLabel*)
;
我遇到了一个错误:“由于可以从alts 1,2访问递归规则调用,所以rule switchBlockLabels具有非LL描述”。我尝试添加语法谓词来解决这个问题。我读了《确定的ANTLR参考》一书。现在我很困惑,因为rule switchBlockLabels中没有替代品,那么就不需要决定选择哪一个了。
有人能帮我吗?每当树解析器偶然发现2
switchCaseLabel
s(中间没有switchDefaultLabel
),它都不知道这些switchCaseLabel
属于哪个。解析器可以从以下三种可能性中进行选择:
- 2
s与第一个switchCaseLabel
匹配李>switchCaseLabel*
- 2
s与第二个switchCaseLabel
匹配李>switchCaseLabel*
- 1
与第一个switchCaseLabel
匹配,一个与第二个switchCaseLabel*
匹配switchCaseLabel*
switchBlockLabels
: ^(SWITCH_BLOCK_LABEL_LIST switchCaseLabel* (switchDefaultLabel switchCaseLabel*)?)
;
这样,当只有switchCaseLabel
s而没有switchDefaultLabel
时,这些switchCaseLabel
s将始终与第一个switchCaseLabel*
匹配:不再存在歧义