rpcalc
のための文法規則逆ポーランド記法電卓のための文法規則を示します。
input: /* 空 */ | input line ; line: '\n' | exp '\n' { printf ("\t%.10g\n", $1); } ; exp: NUM { $$ = $1; } | exp exp '+' { $$ = $1 + $2; } | exp exp '-' { $$ = $1 - $2; } | exp exp '*' { $$ = $1 * $2; } | exp exp '/' { $$ = $1 / $2; } /* べき乗関数 */ | exp exp '^' { $$ = pow ($1, $2); } /* 単項のマイナス */ | exp 'n' { $$ = -$1; } ; %%
ここで定義されるrpcalc「言語」のグループは、
式(exp
)と、入力行(line
)と、
完全な入力の写し(input
)です。
これらの非終端記号には、「論理和」という‘|’記号で区切られた、
いくつかの規則があります。
以下の項で、これらの規則の意味を説明します。
言語の意味は、グループが認識されたときのアクションによって決まります。 アクションとは、ブレースで囲まれたCのプログラムです。 See Actions。
これらのアクションをCで書く必要がありますが、
Bisonには規則の間で意味値を受け渡しする方法があります。
それぞれのアクションで、擬似変数$$
は、
その規則が構成しようとしているグループの意味値を示します。
$$
に値を代入することが、アクションの主な仕事です。
規則の部品の意味値は、$1
、$2
などの
名前で参照されます。