前: Rpcalc Line, 上: Rpcalc Rules
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; }
| ...
しかし、後者のほうが可読性が優れています。