2011-08-02 1 views
1

私は今、最も近いIFとELSE仲間を作る方法を知っている:yaccで最も遠いIFにELSEを関連付ける方法は?

%nonassoc IFX 
%nonassoc ELSE 

| IF stmt %prec IFX 
| IF stmt ELSE stmt 

しかし、どのように私は最も遠いIFELSE仲間を作ることができますか?

上記の2つの順番を入れ替えようとしましたが、それ以降はIF stmt ELSE stmtという形式の有効な文を認識できないようです。

なぜですか?

正しく行うにはどうすればよいですか?

答えて

1

(未テスト)複数のifの間に曖昧さがある場合、if文を減らすパーサをbisonに生成させる必要があります。 http://www.delorie.com/gnu/docs/bison/bison_85.htmlによれば、これは、IF stmtルールがトークンより高い優先順位を有する場合に達成され得る。だから

%nonassoc ELSE 
%nonassoc IFX 

| IF stmt %prec IFX 
| IF stmt ELSE stmt 

トリックを行う必要があります。

関連する問題