4

バイソン文法から AST を構築しようとしています。Bison はパーサーを正しく生成しますが、いくつかの数学演算でサンプル コードを解析しようとすると、次のエラーが表示されます。

[Fatal] calling `.get<Tag__::EXPR>()', but Tag INT is encountered.

exprデバッグ後、問題は次のプロダクションの非ターミナルにあることに気付きました。

expr:
      ...
    | operator
      {
         $$ = $1;
      }

そしてoperator、次のプロダクション自体があります:

operator:
   ...
| INTEGER
  {
    $$ = new ast::expression::IntASTNode(std::stoi(d_scanner.matched()));
  }

私はポリモーフィック セマンティック タイプを使用してexprおり、タイプ witchに応答する でoperatorタグ付けされており、 withの基本クラスです。バイソンはタグから型を取得し、キャストを行う前にタグをチェックしていると思います。これを解決する方法はありますか?EXPRExprASTNodeIntASTNodeINT

4

1 に答える 1