Previous: Rpcalc Line, Up: Rpcalc Rules


2.1.2.3 exprの説明

expグループは、いくつかの規則を持ち、 それぞれが式の種類に対応しています。 最初の規則は、数値そのものであるもっとも単純な式を処理します。 第2の規則は、2個の式に加算記号が続くような、加算式を処理します。 第3の規則は、減算式を処理する、といった具合です。

     exp:      NUM
             | exp exp '+'     { $$ = $1 + $2;    }
             | exp exp '-'     { $$ = $1 - $2;    }
             ...
             ;

すべてのexp規則をまとめるために‘|’を使っていますが、 次のように別々に書くことも可能です。

     exp:      NUM ;
     exp:      exp exp '+'     { $$ = $1 + $2;    } ;
     exp:      exp exp '-'     { $$ = $1 - $2;    } ;
             ...

規則のほとんどは、式の部品の値から式の値を計算するための、 アクションを持っています。 たとえば、加算のための規則では、$1は式の第1の部品を、 $2は式の第2の部品を表します。 第3の部品'+'は、意味値には関連する情報を持ちませんが、 もし値を持っていれば、$3として参照できます。 yyparseがこの規則を使って加算式を認識すると、 式全体の値として、2個の部分式の値の和が生成されます。 See Actions

すべての規則に対してアクションを書く必要はありません。 アクションを省略すると、Bisonは$1の値を$$に複写します。 第1の規則では、NUMの値をそのまま複写するために、 このようになっています。

ここで示したリストは、望ましい書式ですが、 Bisonがこのように要求するわけではありません。 必要に応じて、空白、タブ、改行を置けます。 次のような書き方も可能です。

     exp   : NUM | exp exp '+' {$$ = $1 + $2; } | ...

これは、次のリストと等価です。

     exp:      NUM
             | exp exp '+'    { $$ = $1 + $2; }
             | ...

しかし、後者のほうが可読性が優れています。