0

私はEBNF表記でこの文法を持っています:

expr -> expr (opt1 | opt2 | opt3) expr

そして、Bisonで使用するためにBNFに変換したいのですが、これでshift/reduceエラーが発生します。

expr : expr opt1 expr | expr opt2 expr | expr opt3 expr

途中で何か誤解したと思います。何か助けはありますか?

ありがとう

4

1 に答える 1

3

どうですか

expr: expr optexpr expr
optexpr: opt1 | opt2 | opt3

シフト/リデュースエラーは、exprプレフィックスが重複していることが原因です。別の定義を導入することにより、exprの構文解析が明確になります。

于 2012-04-02T14:57:20.077 に答える