3

Bison の演算子の優先順位と結合性について質問があります。

すべての例で、プロダクションは次のようexpr 'op' exprになっています。たとえば、http://dinosaur.compilertools.net/bison/bison_8.html

しかし、バイソン%leftやその他の連想ツールを使用する場合、次のような文法を使用します。

  expr|     expr binop expr
      |     expr relop expr
      |     expr logical_op expr

 binop: '+' 
      | '-' 
      | '*' 
      | '/' 
      ;
 relop: EE
      | NE
      | LE
      | '<'
      | GE
      | '>'
      ;
 logical_op: AND
           | OR
           ;

結合性と優先順位の規則は使用されますか?

expr 'op' exprまたは、すべての演算子に対して明示的に記述する必要がありますか?

投稿したような文法を使用しようとすると、競合に関する警告が表示されるため、質問しています。

しかし、手作業で作品を書くとexpr '+' expr、警告が表示されないようになります。

4

2 に答える 2

8

優先ルールが機能するには、ターミナル自体があいまいなプロダクションに表示される必要があります。したがって、ターミナルを非ターミナルにグループ化して、優先ルールを使用する機能を保持することはできません。

于 2012-11-26T15:05:08.317 に答える
1

演算子の優先順位を考慮して、文法規則(プロダクション)を追加することを好みます。ここで私の答えを参照してください。

于 2012-11-26T23:52:57.603 に答える