次: Rpcalc Lexer, 前: Rpcalc Decls, 上: RPN Calc
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などの
名前で参照されます。