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