0
//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).,只会有两个冲突,但我不知道为什么会导致冲突......

更新2

为什么这里可以:

template ::= template_elements.
template ::= template template_elements.
template ::= .
4

1 回答 1

0

要修复您的 exp 歧义,请设置优先级和关联性——请参阅Precedence Rules 下的文档。

Lemon 可以处理左递归,但你的template规则应该是

template ::= template template_elements.
template ::= .

因为template可以为空,所以不需要template ::= template_elements案例。

进行这些更改后,您会遇到什么错误?

于 2011-03-03T05:24:42.090 回答