0

以前は ocaml でプログラミングし、ocalmyacc を使用してパーサーを生成していました。ocaml の非常に便利なフェザーの 1 つは、次のようなバリアント型です。

type exp = Number of int
| Addexp of exp*exp

このような型を使用すると、パーサーで AST データ構造を非常にエレガントに構築して、次のような exp を表すことができます。

exp :
number {Number($1)}
| exp1 + exp2 {Addexp($1,$3)}

では、C++ と bison に同様のメカニズムが存在する場合は?

4

1 に答える 1

1

はい、 と対戦するだけexp + expです。%type特定のルールでは、そのすべてのアクションが同じように に割り当てられている必要があることに注意してください$$。あなたの場合、次のようになります。

exp: number      { $$ = PrimaryExp($1); }
|    exp '+' exp { $$ = AddExp($1, $2); }
于 2016-01-06T13:50:43.803 に答える