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つだけになりますが、なぜこれが競合を引き起こしているのかわかりません...

UPDATE2

ここで大丈夫な理由:

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

1 に答える 1

0

expのあいまいさを修正するには、優先順位と結合性を設定します。優先順位規則のドキュメントを参照してください。

レモンは左再帰を処理できますが、templateルールは

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

template空にすることができるので、ケースは必要ありませんtemplate ::= template_elements

これらの変更を行った後、どのようなエラーが発生しますか?

于 2011-03-03T05:24:42.090 に答える