//complete
start ::= template.
//template
template ::= template_elements.
template ::= template template_elements.
template ::= .
//template elements
template_elements(res) ::= COMMENT.
template_elements(res) ::= tag(t).
//tag
tag(res) ::= LDEL exp(e) RDEL.
//exp
exp(res) ::= value(v).
exp(res) ::= exp(e1) OP(o) exp(e2).
//value
value(res) ::= variable(v).
//variable
variable(res) ::= DOLLAR ID(i).
任何人都知道冲突的位置?
更新
如果我删除exp(res) ::= exp(e1) OP(o) exp(e2).
,那么只会发生两次冲突,但我不知道为什么会造成冲突......
UPDATE2
为什么没关系here:
template ::= template_elements.
template ::= template template_elements.
template ::= .
答案 0 :(得分:0)
要修复exp歧义,请设置优先级和关联性 - 请参阅优先规则下的documentation。
Lemon可以处理左递归,但您的template
规则应该是
template ::= template template_elements.
template ::= .
由于template
可以为空,因此您不需要template ::= template_elements
案例。
进行这些更改后会出现什么错误?